Common pathname manipulations to save in a specific directory a file
Question: I am writing a function where I read `inFile` in order to split it into two
files (outFile1,outFile2).

What I want is if `outFile1` and/or `outFile2` are specified without pathname
directory (ex: `outFile1="result1.txt"` and `outFile2="result2.txt"`) both
files are saved in the same directory as `inFile` (ex:
inFile="C:\mydata\myfile.txt"). If the pathname directory for the output files
is present, I wish to save the results in that directory.

when I don't report the the `outFile` pathname directory, the files are saved
in the same directory as my python script.

    
    
    def LAS2LASDivide(inFile,outFile1,outFile2,Parse,NumVal):
        inFile_path, inFile_name_ext = os.path.split(os.path.abspath(inFile))
        outFile1_path, outFile1_name_ext = os.path.split(os.path.abspath(outFile1))
        outFile2_path, outFile2_name_ext = os.path.split(os.path.abspath(outFile2))
        outFile1_name = os.path.splitext(outFile1_name_ext)[0]
        outFile2_name = os.path.splitext(outFile2_name_ext)[0]
    

example

    
    
    inFile="C:\\mydoc\\Area_18.las"
    outFile1="Area_18_overlap.las"
    outFile2="Area_18_clean.las"
    
    inFile_path, inFile_name_ext = os.path.split(os.path.abspath(inFile))
    inFile_path, inFile_name_ext
    ('C:\\mydoc', 'Area_18.las')
    
    outFile1_path, outFile1_name_ext = os.path.split(os.path.abspath(outFile1))
    outFile1_path, outFile1_name_ext 
    ('C:\\Program Files\\PyScripter', 'Area_18_overlap.las')
    

this is all my code (tested) modify with the suggestion of mgilson

    
    
    import os
    from os import path
    from liblas import file as lasfile
    
    
    def LAS2LASDivide(inFile,outFile1,outFile2,Parse,NumVal):
        inFile_path, inFile_name_ext = os.path.split(os.path.abspath(inFile))
        outFile1_path, outFile1_name_ext = os.path.split(os.path.abspath(outFile1))
        outFile2_path, outFile2_name_ext = os.path.split(os.path.abspath(outFile2))
        outFile1_name = os.path.splitext(outFile1_name_ext)[0]
        outFile2_name = os.path.splitext(outFile2_name_ext)[0]
        if outFile1_name != outFile2_name:
            # function pesudo_switch
            def pseudo_switch(x):
                return {
                    "i": p.intensity,
                    "r": p.return_number,
                    "n": p.number_of_returns,
                    "s": p.scan_direction,
                    "e": p.flightline_edge,
                    "c": p.classification,
                    "a": p.scan_angle,
                }[x]
            h = lasfile.File(inFile,None,'r').header
            # change the software id to libLAS
            h.software_id = ""
            if not os.path.split(outFile1)[0]:
                file_out1 = lasfile.File(os.path.abspath("{0}\\{1}.las".format(inFile_path,outFile1_name)),mode='w',header= h)
            else:
                file_out1 = lasfile.File(os.path.abspath("{0}\\{1}.las".format(outFile1_path,outFile1_name)),mode='w',header= h)
            if not os.path.split(outFile2)[0]:
                file_out2 = lasfile.File(os.path.abspath("{0}\\{1}.las".format(inFile_path,outFile2_name)),mode='w',header= h)
            else:
                file_out2 = lasfile.File(os.path.abspath("{0}\\{1}.las".format(outFile2_path,outFile2_name)),mode='w',header= h)
            for p in lasfile.File(inFile,None,'r'):
                if pseudo_switch(Parse) == int(NumVal):
                    file_out1.write(p)
                elif pseudo_switch(Parse) != int(NumVal):
                    file_out2.write(p)
            file_out1.close()
            file_out2.close()
        else:
            print "outFile1 and outFile2 cannot have the same name"
    


Answer: What about something like this?

    
    
    def new_path(fcheck,fpath):
        """
        fcheck --> filename to check
        fpath  --> file with path component to transfer 
                   if fcheck has no path component
        """
        head,tail = os.path.split(fcheck)
        return os.path.join(os.path.split(fpath)[0],tail) if not head else fcheck
    
    new_path('foo/bar','baz/qux')   #'foo/bar'  -- has path component.  Leave alone
    new_path('bar','baz/qux')       #'baz/bar'  -- No path component.  Transfer
    new_path('bar','qux')           #'bar'      -- Neither has path component.  Path must be '.'.  Leave alone.
    

