2011-07-20 26 views
9

Bir metin dosyasından yaklaşık 20 milyon satırı ayrıştırmaya çalışıyorum ve soru işaretleriyle başlamayan satırlarda daha fazla değişiklik yapmak için bir yol arıyorum. Normal ifadeyi kullanmayan bir çözüm istiyorum. Ne yapmak istiyorum böyle bir şeydir: Karakterle başlamayan tüm dizeleri almanın en kolay yolu nedir?

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

Ben startswith yöntem bir argüman alır biliyorum ama bir soru işareti ile başlamak YAPMAYIN bir hattan tüm satırları almak için herhangi bir basit bir çözüm var mı? Yardım için şimdiden teşekkür ederiz.

cevap

21

Jeneratör ifadelerini, düşündüğüm en iyi şekilde kullanın.

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

Veya yolu:

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

Veya:

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

Gerçekten programlama tarzı kalmıştır. İlkini tercih ederim ama belki ikinci olanı daha basit görünüyor. Ama çok fazla girinti nedeniyle üçüncü bir tanesini gerçekten sevmiyorum. Böyle

+0

yardım için çok teşekkür ederiz! – drbunsen

2

şey muhtemelen ne konum sonra: utdemir cevabı Benzer

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

Bir oda bir kılıftır, doğal dile çok yakın.

Dize tanımı:

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

Kod senet gerçekleştirir:

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