2012-03-01 1 views
9

初心者の質問。 Python 2.7.2では、誤っていくつかの制御文字が含まれているように見えるテキストファイルを読むのに問題があります。具体的には、ループPythonでSUBを超えて行を読む

for line in f

はすぐにそれがSUB文字(ASCII 16進コードの1a)を含む行を越えてくると、警告やエラーなしで終了します。 f.readlines()を使用すると、結果は同じになります。基本的には、Pythonに関する限り、ファイルは最初のSUB文字に遭遇するとすぐに終了し、最後に割り当てられた値lineはその文字までの行です。

このような文字を超えて読んだり、警告を発したりする方法はありますか?

答えて

8

Windowsシステムでは0x1aは、ファイルの終わり文字です。あなたはそれを乗り越えるために、バイナリモードでファイルを開く必要があります:

f = open(filename, 'rb') 

欠点は、あなたが行指向の性質を失い、ラインを自分で分割する必要がありますです。

lines = f.read().split('\r\n') # assuming Windows line endings 
+1

Linuxの行末で 'lines = f.read()。split( '\ n')' –

6

バイナリモードでファイルを開いてみてください:

f = open(filename, 'rb') 
+3

千回ありがとう。 –