5

Python バージョン: 2.7.3

ファイル名: テスト雪だるまキャラクター --☃--.mp3

次のテストを実行しましたが、どれも成功しませんでした。

>>> os.path.exist('test snowman character --☃--.mp3')
False
>>> os.path.exist(repr('test snowman character --☃--.mp3'))
False
>>> os.path.isfile('test snowman character --\\xe2\\x98\\x83--.mp3')
False
>>> os.path.isfile(r'test snowman character --\\xe2\\x98\\x83--.mp3')
False
>>> os.path.isfile('test snowman character --☃--.mp3'.decode('utf-8'))
False

そのテストが失敗したとしても、グロブでファイルを取得しようとしました。

目的は、このファイルを検出して別のフォルダーにコピーすることです。アドバイスしてください。

4

3 に答える 3

3

Unicode 値を使用します。できれば Unicode エスケープ シーケンスを使用します。

os.path.isfile(u'test snowman character --\u2603--.mp3')

Windows 上の Python は、Unicode パスを指定すると、UTF16 ファイルを一覧表示するために正しい Windows API を使用します。

Python がユニコードとバイト文字列のファイル パスで動作を変更する方法の詳細については、Python Unicode HOWTOを参照してください。

于 2013-10-29T01:42:21.843 に答える
1

Windows NTFS ファイルシステムは UTF-16 を使用します ( Martijn Pietersに聞いてください)。

>>> os.path.exists(u'test snowman character --☃--.mp3'.encode("UTF-16"))

ただし、最初にインタプリタの入力エンコーディングが正しいことを確認してください。print repr(u'test snowman character --☃--.mp3')出力する必要があります:

u'test snowman character --\u2603--.mp3'

注: Windows CMD では雪だるまの記号を入力できないため、これをテストすることはできません。いずれにせよ、Unicode 文字列を指定するだけで Python は正しいことを行うことが判明したため、encode 呼び出しは不要です。要約すると、Martijn Pietersの回答をお勧めします。

于 2013-10-29T01:41:04.557 に答える