2017-05-31 3 views
0

私は、ファイルから特殊文字(スペイン語で使用される)で文字列を読み込むプログラムを持っています。次に、chdirを使用して、その名前が文字列であるディレクトリに変更します。私はPythonのパスを変更するchdir

f=open("names.txt","r",encoding="utf-8") 
names=f.readlines() 
f.close() 

を次のように私のpythonからそれを読むように、UTF-8でエンコードされたファイル以下

Tableta 
Música 
. 
. 
etc 

を得ました「names.txt」と呼ばれるファイルで例えば

:そしてそれはすべて成功し

print(names) 

出力読みません0

['Tableta\n','Música\n', ...etc] 

私は(改行文字なしの最初の名「Tableta」、)最初のディレクトリに変更したいときに問題が発生し

chdir(names[0][:-1]) 

私は、次のエラー

FileNotFoundError: [WinError 2] The system cannot find the file specified: "\ufeffTableta"

を取得し、それは私には非常に奇妙であったファーストネームでのみ起こります。他の名前では、特殊文字を持っているかどうかにかかわらず、ディレクトリを変更することができます

「\ ufeff」余分な文字が追加されているため、エンコーディングで何かをしなければならないと思いました。だから、 "names.txt"ファイルをANSIコーディングに変更し、すべての特殊文字を削除して、Pythonでそれを読むことができました。しかし、私は特殊な文字を読むことができるようにutf-8コーディングでそのファイルを持つ必要があります。私がこれを解決できる方法はありますか?なぜPythonは '\ ufeff'文字を文字列に追加し、最初の名前だけを追加するのでしょうか?

答えて

1

ファイル "names.txt"には、バイトオーダーマスク(BOM)があります。それを削除するには、次のデコーダでファイルを開く:

f = open("names.txt", encoding="utf-8-sig") 

注意点としては、ファイル名を除去する方が安全です:代わりにnames[0][:-1]names[0].strip()を。

+0

ありがとうございました。ところで、BOMとは何ですか? –

0

ファイルの先頭には、ユニコードBOMがあります。ファイルを読むときに最初の文字をスキップするか、utf-8-sigエンコーディングでファイルを開きます。

関連する問題