2017-07-06 10 views
1

内の特殊文字に「システムは指定されたファイルを見つけることができませんが」、私は2つのファイルが使用して同じサイズであるかどうかを確認するためにテストしています:のPythonによる私のPythonスクリプトの一部として、ファイル名

os.path.getsize(dir_file) # dir_file = root path + filename joined 

しかし、その名前に特殊文字(例えばÜ)を含むファイルが出現すると、次のエラーが表示されます。WindowsError: [Error 2] The system cannot find the file specified\xf6のような特殊文字を置き換えます。

私はそうのようにUTF-8にエンコードdir_fileを試してみた:

unicode(dir_file, 'utf-8') # method 1 
dir_file.encode('utf-8') # method 2 

しかし、それは私に次のエラー与える:UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 79: ordinal not in range(128)を。

文字エンコーディングのこの問題を回避する方法が不明です。

+2

私たちは推測できますが、Pythonのバージョンをタグに指定する必要があります。 Python 2とPython 3はUnicodeを非常に異なる方法で扱います。 –

+0

どのようにして、変数dir_fileの内容を正確に初期化して結合しましたか? – anneb

+1

@RoryDaulton Oh ok。私はPython 2を使用しています – sookie

答えて

1

ファイルシステムのエンコーディングをsys.getfilesystemencoding()にして、ニーズを明確にしてください。

は、その後、あなたの結果を与える

if isinstance(dir_file, str): 
print "ascii" 
elif isinstance(dir_file, unicode): 
print "unicode" 

あなたはパラメータに渡す文字列が同じエンコーディングを使用していることを確認し、私は答えを更新します。

+0

'os.walk()'に入力する前に、 'unicode'にルートディレクトリ文字列をデコードしたときに動作しました。しかし、大規模なファイルセットでスクリプトをテストすると、1000個のファイルごとに約1個がIOError(ディレクトリを開こうとすると)かUnicodeEncodeError(ディレクトリを印刷しようとすると)のいずれかが生成されます。 – sookie

+0

'UnicodeEncodeError'は、印刷する前に文字列をutf-8にエンコードすることで解決されました。これは、' sys.getfilesystemencoding() 'を実行し、結果として 'mbcs'を返しました。 'IOError'はまだ私を逃す – sookie

関連する問題