Mam sznurek z wieloma liniami. Jak czytać wiersze jeden po drugim z for
klauzulą? Oto, co próbuję zrobić i pojawia się błąd w zmiennej textData, do której odwołuje się for line in textData
wiersz.
for line in textData
print line
lineResult = libLAPFF.parseLine(line)
Zmienna textData istnieje, drukuję ją przed zejściem, ale wydaje mi się, że prekompilator wykopuje błąd.
TIA
Dennis
textData
? Czy możesz nam dać SSCCE , coś, co możemy uruchomić i zobaczyć ten sam problem co Ty, abyśmy mogli Ci go wyjaśnić?Odpowiedzi:
A co z używaniem
.splitlines()
?for line in textData.splitlines(): print(line) lineResult = libLAPFF.parseLine(line)
źródło
"/r"
i"/n"
są to zwykłe dwuznakowe ciągi składające się z ukośnika i litery. Czy miałeś na myśli"\n"
?rozdzielając je nowymi liniami.
for line in wallop_of_a_string_with_many_lines.split('\n'): #do_something..
jeśli iterujesz po ciągu, wykonujesz iterację znak po znaku w tym ciągu, a nie po linii.
>>>string = 'abc' >>>for line in string: print line a b c
źródło
Ta odpowiedź zawodzi w kilku skrajnych przypadkach (patrz komentarze). Zaakceptowane powyżej rozwiązanie poradzi sobie z nimi.
str.splitlines()
jest droga do zrobienia. Niemniej jednak pozostawię tę odpowiedź jako odniesienie.Stara (nieprawidłowa) odpowiedź:
s = \ """line1 line2 line3 """ lines = s.split('\n') print(lines) for line in lines: print(line)
źródło
import re
re.split
zamiaststr.split
(lubsplitlines
) po prostu do dzielenia na znaki nowej linii? Budowanie wyrażenia regularnego z pojedynczego, statycznego, dosłownego znaku po prostu komplikuje sprawę bez powodu.s.split
. Zmieniam to terazsplit('\n')
zachowa wszystkie\r
znaki w żądle. Zwroty karetki nie zostaną usunięte, co może być problemem.