我正在编写一个函数,我在其中读取inFile
以将其拆分为两个文件(outFile1,outFile2)。
我想要的是如果指定outFile1
和/或outFile2
而没有路径名目录(例如:outFile1="result1.txt"
和outFile2="result2.txt"
),则两个文件都保存在同一目录中inFile
(例如:inFile =“C:\ mydata \ myfile.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"
答案 0 :(得分: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.