0

ファイル名がまたはであることは知っていますがfile001.txt、どちらFILE001.TXTかわかりません。このファイルは、sambaマウントポイントを介してアクセスしているWindowsマシンにあります。

の関数は大文字と小文字を区別しないように動作しているように見えますが、関数 os.pathは大文字と小文字を区別しているようです。open

>>> from os.path import exists, isfile

>>> exists('FILE001.TXT')
True

>>> isfile('FILE001.TXT')
True

>>> open('FILE001.TXT')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'FILE001.TXT'

>>> open('file001.txt')    # no problem

だから、私の質問はこれらです:

  1. ファイルを開かずに(またはファイルが含まれているディレクトリを一覧表示せずに)ファイル名を判別する方法はありますか?

  2. 大文字と小文字が区別されないのに、なぜopen大文字と小文字が区別されるのos.pathですか?


更新:回答に感謝しますが、これはPythonの問題ではないため、質問を閉じます。

4

3 に答える 3

1

fstabのマウントにnocaseを追加してみてください。これは、以下で掘り下げた例のように、まだ存在しない場合です。

//server/acme/app    /home/joe/.wine/drive_c/App    cifs    guest,rw,iocharset=utf8,nocase,file_mode=0777,dir_mode=0777    0    0

ノルムケースを説明するリンクを見つけました

normcaseは、mahadeva.mp3とmahadeva.MP3が同じファイルであると見なす大文字と小文字を区別しないオペレーティングシステムを補正する便利な小さな関数です。たとえば、WindowsおよびMac OSでは、normcaseはファイル名全体を小文字に変換します。UNIX互換システムでは、ファイル名は変更されずに返されます。

これは、Windowsファイルシステムではopenが常に小文字のファイル名を期待していることを示しています。

そのため、os.pathで大文字と小文字が区別されない理由は、ファイルをチェックする前にos.path.normcaseを呼び出す可能性がありますが、openでは呼び出さないためです。ただし、それもバグである可能性があります。

于 2010-10-27T01:37:57.777 に答える
0

あなたの質問に答えるには:

  1. statファイルを開こうとせずに、ファイルが存在するかどうかを判断するために使用できます。
  2. Windows共有ファイルシステムは大文字と小文字を区別しません。
于 2010-10-27T01:26:53.003 に答える
0
def exists(path):
    try:
        open(path).close()
    except IOError:
        return False
    return True

権限の問題はさておき、ファイルを開きたくないのはなぜですか?

于 2010-10-27T01:33:45.910 に答える