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があり、そのケースの処理方法について真剣に考える必要があることに注意してください。2つのうち任意の1つを開き、最新のものを開きます。 2つ、またはエラーを報告しますか?

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

これにより、通常の呼び出しと同じように、書き込み用にファイルを開かない限り、句IOErrorに到達するとifが発生します。elseopen()

于 2012-12-27T22:39:03.760 に答える