1

我正在从文件“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_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()
4

2 回答 2

4

使用 获取预期位置中的文件列表os.listdir(),然后对于那里的每个文件,将文件名扁平化为小写并将其与"data_file.txt". 但是请注意,在文件大小写很重要的系统上,您可能会同时找到 aData_file.txt和 a data_FILE.txt,并且您需要认真考虑如何处理这种情况——打开两者中的任意一个,打开最近的一个二、还是报错?

于 2012-12-27T22:32:57.647 回答
1

除非您的文件系统使用不区分大小写的文件名,否则您不能简单地打开文件而不考虑文件名的大小写。尝试类似:

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)

这将引发一个IOErrorif 它到达else子句,除非您打开文件进行写入,就像常规open()调用一样。

于 2012-12-27T22:39:03.760 回答