2015-12-21 1 views
9

ファイルを1行ずつ印刷するとき、コードは3つの不要な文字、つまり「」を追加する傾向があります。なぜ私のPythonコードは、テキストファイルから読み込むときに余分な文字 ""を印刷するのですか?

実際の出力:

Man said: Is this the right room for an argument? 
Other Man said: I've told you once. 
Man said: No you haven't! 
Other Man said: Yes I have. 

予想される出力:私は、Python 2とは異なるエンコーディングを扱うPythonの3、このの重複を見つけることができません

Man said: Is this the right room for an argument? 
Other Man said: I've told you once. 
Man said: No you haven't! 
Other Man said: Yes I have. 
+3

ファイルはおそらくUTF-8 __with__ BOMでエンコードされています。これがあなたが望むものでない場合は、BOMなしでエンコードしてください。 –

+1

[ファイルの先頭からファイルを削除するにはどうすればいいですか?](http://stackoverflow.com/questions/3255993/how-do-i-remove-%c3%af-from-the-ファイルの先頭) –

+5

@MarcBそれでは、それはあまり意味がありません。 PythonはPHPではなく、UTF-8 BOMを処理するためのより良いオプションがあります。 OPの場合、あなたの 'open()'呼び出しに 'encoding = 'utf-8-sig''を渡します。 – senshin

答えて

23

ので、ここに答えがあります:デフォルトのエンコーディング('utf-8')でファイルを開く代わりに'utf-8-sig'を使用してください。これは、UTF-8 Byte Order Markは、と表示されます。あなたは、Python 2にしている場合、あなたは例えば参照する必要があること

data = open('info.txt', encoding='utf-8-sig') 

注意を行い代わりに

data = open('info.txt') 

のある

Python, Encoding output to UTF-8およびConvert UTF-8 with BOM to UTF-8 with no BOM in Pythoncodecsまたはstr.decodeを使って、これをPython 2で正しく動作させる必要があります。しかし、Python 3では、ファイルを開くときにencoding=パラメータを設定するだけです。

0

excel csvファイルを扱うとき、私は非常に似た問題がありました。最初は、ドロップダウンの選択肢から.csv utf-8(カンマ区切り)ファイルとしてファイルを保存しました。次に、それを.csv(カンマ区切り)ファイルとして保存し、すべてがうまくいった。おそらく、.txtファイルで同様の問題が発生する可能性があります。

関連する問題