2009-11-23 9 views
18

W Pythonie można odczytać pliku i załadować swoje linie do listy za pomocąKonwersja r tekst n tak readlines() działa zgodnie z przeznaczeniem

f = open('file.txt','r') 
lines = f.readlines() 

Każdy wiersz jest ograniczona przez \n ale jeśli zawartość linii ma \r, a następnie nie jest traktowana jako nowa linia. Muszę przekonwertować wszystkie \r na \n i uzyskać prawidłową listę lines.

Jeśli wykonam .split('\r') wewnątrz lines, otrzymam listy na liście.

myślałem o otwarciu pliku, należy wymienić wszystkie \r do \n, zamykając plik i czytanie go ponownie, a następnie użyj readlines() ale to wydaje się marnotrawstwem.

Jak mam to wdrożyć?

+0

Właściwie, jeśli masz połączenie '\ n' i' \ r' nowej linii, a jeśli ten ostatni występuje w ciągu "rzeczywiste" linie oddzielone przez '\ n', a następnie uzyskanie list wewnątrz listy wydaje mi się właściwą rzeczą. –

Odpowiedz

44
f = open('file.txt','rU') 

Otwiera plik z Pythona universal newline support i \r jest traktowana jako cel-of-line.

+3

... chociaż ta funkcja jest nieaktualna i nie powinna być używana w nowym kodzie zgodnie z dokumentacją Pythona. –

+0

Dzięki! Działa to zgodnie z przeznaczeniem i jest dla mnie wystarczające. Tim, jaki byłby właściwy sposób na zrobienie tego teraz? – greye

+3

W Pythonie 3.x obsługa standardu newline jest włączona domyślnie, więc nie musisz nic robić. –

3

Jeśli jest to problemem, otwarty w formacie binarnym i konwertować z tym kodem:

from __future__ import with_statement 

with open(filename, "rb") as f: 
    s = f.read().replace('\r\n', '\n').replace('\r', '\n') 
    lines = s.split('\n') 
Powiązane problemy