2017-03-29 4 views
1

名前にUnicode以外の文字を含むファイルの名前を変更しようとしています。Python3 'ascii'コーデックは文字をエンコードできません

import os 

dir = b'/tr2' 

for file_name in os.listdir(dir): 
    file_name = file_name.decode('utf8','replace') 
    print(file_name) 
    os.rename(file_name,'11.txt') 

のみ、この名前を印刷し、私は名前を変更しようとすると、私はエラーを取得することができます:

UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 11: ordinal not in range(128) 
+0

これはどのラインで起こっていますか? 'print(file_name)'(ユニコードを扱うことができない端末にユニコードデータを出力しようとしています)または 'os.rename(file_name、'11 .txt ')'にありますか?常に_full_スタックトレースを含めてください。また、バイナリファイル名をデコードする必要はありません。 'os.listdir'で返された' os.rename'に渡すとうまくいくはずです。 – mata

+0

10行目をリネームして、大文字にします。 os .rename(file_name、'11 .txt ') UnicodeEncodeError:' ascii 'コーデックは、文字' \ xf1 'を位置11にエンコードできません:序数は範囲(128)にありません。そして、私がfile_name = file_name.decode( 'utf8'、 'replace')を取り除くと、エラーが出ます - FileNotFoundError:[Errno 2]そのようなファイルやディレクトリはありません:b'01 Contrase \ xc3 \ xb1as.txt ' - > '11 .txt ' – Aaron

+0

'os.rename()'は現在のディレクトリに対して相対的に動作します。 'os.listdir()'によって返されるファイルは指定されたパス( 'dir = b'/tr2'')からの相対パスです。 FileNotFoundErrorを取得します。 file_nameをデコードしないで 'os.rename(os.path.join(dir、file_name)、os.path.join(dir、b'11.txt '))'を試してください。 – mata

答えて

0

問題は、私はFILE_NAMEの値を表示し、それに取り組むために必要なことでしたプログラムの後半。だからマーティン・エバンスのおかげで、次の決定が下されました。

import os 

dir = b'/tr2' 

for file_name in os.listdir(dir): 

print(file_name.decode('utf8','replace')) 

os.rename(os.path.join(dir, file_name), os.path.join(dir, b'11.txt')) 
関連する問題