2012-11-06 19 views
1

我正在写一个函数,我读​​为了将它分成两个文件(outFile1,outFile2)。这两个文件保存在同一目录​​(例如:INFILE =“C:\ MYDATA \ myfile.txt的:通用路径名操作保存在一个特定的目录文件

如果outFile1和/或outFile2都没有路径目录(outFile1="result1.txt"outFile2="result2.txt"前)指定我要的是“)。如果输出文件的路径名目录存在,我希望将结果保存在该目录中。

当我没有报告outFile路径名目录时,这些文件被保存在与我的python脚本相同的目录中。

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] 

例如

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') 

这是我所有代码(测试)与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" 

回答

2

什么像这样的建议修改?

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. 
+0

在几分钟内感谢我将测试您的解决方案 –

+0

我测试了您的代码,我修改了我的旧代码 –

相关问题