2012-03-01 24 views
9

Pytanie dla nowicjusza. W Pythonie 2.7.2. Mam problem z odczytaniem plików tekstowych, które przypadkowo wydają się zawierać pewne znaki kontrolne. W szczególności, pętlaCzytanie linii poza SUB w Pythonie

for line in f

przestanie bez żadnego ostrzeżenia lub błędu tak szybko, jak to jest po drugiej stronie linii zawierającej SUB znaków (ASCII kod szesnastkowy 1a). Podczas korzystania z f.readlines() wynik jest taki sam. Zasadniczo, jeśli chodzi o Python, plik kończy się, gdy napotkany zostanie pierwszy znak SUB, a ostatnia wartość przypisana line jest linią do tej postaci.

Czy istnieje sposób na odczytanie poza takim znakiem i/lub wysłanie ostrzeżenia po jego znalezieniu?

Odpowiedz

8

W systemach Windows 0x1a jest znak EOF. Musisz otworzyć plik w trybie binarnym, aby ominąć go:

f = open(filename, 'rb') 

Minusem jest straci charakter liniowy zorientowany i muszą podzielić się linie:

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

dla zakończeń linii linuxowych, użyj 'lines = f.read(). Split ('\ n')' –

6

spróbuj otworzyć plik w trybie binarnym:

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

dziękuję tysiąc razy. –

Powiązane problemy