Python 如何处理用户创建的文件的caer案例错误
我正在从文件“data_file.txt”中获取一些信息,这是一个由最终用户创建的文件,但是如果用户使用不同的案例创建它,例如data_file.txt或data_file.txt等等……我如何在脚本中注意适应这种案例不匹配情况Python 如何处理用户创建的文件的caer案例错误,python,Python,我正在从文件“data_file.txt”中获取一些信息,这是一个由最终用户创建的文件,但是如果用户使用不同的案例创建它,例如data_file.txt或data_file.txt等等……我如何在脚本中注意适应这种案例不匹配情况 def getAU (aufilename): file = open(aufilename,'r') return file.read() def main (): aufilename="data_file.txt" #ROOT_D
def getAU (aufilename):
file = open(aufilename,'r')
return file.read()
def main ():
aufilename="data_file.txt"
#ROOT_DIR - The reference android build used to make the builds
AU=getAU(aufilename)
ROOT_DIR= "/local/mnt/workspace/username/LA_CI/" + AU
print ROOT_DIR
if __name__ == '__main__':
main()
使用
os.listdir()
获取预期位置的文件列表,然后将每个文件的文件名平铺为小写,并与的“data\u file.txt”
进行比较。但是,请注意,在文件大小写非常重要的系统上,您可能会找到Data_file.txt
和Data_file.txt
,您需要仔细考虑如何处理这种情况--打开任意一个,打开两个中最近的一个,或报告错误?使用os.listdir()
获取预期位置的文件列表,然后针对每个文件,将文件名平铺为小写,并与的“data\u file.txt”
进行比较。但是,请注意,在文件大小写非常重要的系统上,您可能会找到Data_file.txt
和Data_file.txt
,您需要仔细考虑如何处理这种情况--打开任意一个,打开两个中最近的一个,或者报告错误?除非文件系统使用不区分大小写的文件名,否则不能不考虑文件名的大小写而直接打开文件。尝试以下方法:
import os
def case_insensitive_open(filename, mode='r'):
dir = os.path.dirname(filename)
for potential_match in os.listdir(dir):
if potential_match.lower() == filename.lower():
return open(os.path.join(dir, potential_match), mode)
else:
return open(potential_match, mode)
如果到达
else
子句,这将引发IOError
,除非您打开文件进行写入,就像常规的open()
调用一样。除非文件系统使用不区分大小写的文件名,否则您不能简单地打开文件而不考虑文件名的大小写。尝试以下方法:
import os
def case_insensitive_open(filename, mode='r'):
dir = os.path.dirname(filename)
for potential_match in os.listdir(dir):
if potential_match.lower() == filename.lower():
return open(os.path.join(dir, potential_match), mode)
else:
return open(potential_match, mode)
如果它到达else
子句,这将引发一个IOError
,除非您打开文件进行写入,就像常规的open()
调用一样。看看,不敏感的\u glob()
应该对您有帮助。看看,不敏感的\u glob()
应该对您有帮助。