2011-07-20 13 views
9

Próbuję przeanalizować około 20 milionów linii z pliku tekstowego i szukam sposobu na dalsze manipulacje na liniach, które nie zaczynają się od znaków zapytania. Chciałbym rozwiązanie, które nie używa dopasowywania wyrażenia regularnego. Co chciałbym zrobić coś takiego:Jaki jest najprostszy sposób na uzyskanie wszystkich ciągów, które nie zaczynają się od postaci?

for line in x: 
    header = line.startswith('?') 
if line.startswith() != header: 
     DO SOME STUFF HERE 

Zdaję sobie sprawę, metoda startswith przyjmuje jeden argument, ale jest jakieś proste rozwiązanie, aby uzyskać wszystkie wiersze z linii, które nie zaczynają się od znaku zapytania? Z góry dziękuję za pomoc.

Odpowiedz

21

Użyj wyrażeń generatora, najlepiej jak myślę.

for line in (line for line in x if not line.startswith('?')): 
    DO_STUFF 

Albo twój sposób:

for line in x: 
    if line.startswith("?"): 
     continue 
    DO_STUFF 

Lub:

for line in x: 
    if not line.startswith("?"): 
     DO_STUFF 

To naprawdę zależy od stylu programowania. Wolę ten pierwszy, ale może drugi wydaje się prostszy. Ale naprawdę nie lubię trzeciej z powodu dużej liczby wcięć.

+0

Dziękuję bardzo za pomoc! – drbunsen

2

Coś jak to jest chyba to, co jesteś po:

with open('myfile.txt') as fh: 
    for line in fh: 
    if line[0] != '?': # strings can be accessed like lists - they're immutable sequences. 
     continue 
    # All of the processing here when lines don't start with question marks. 
0

Oto miły jeden-liner, który jest bardzo zbliżony do języka naturalnego. Definicja

String:

StringList = [ '__one', '__two', 'three', 'four' ] 

kod, który wykonuje czyn:

BetterStringList = [ p for p in StringList if not(p.startswith('__'))]