2011-07-20 12 views
9

Estoy tratando de analizar aproximadamente 20 millones de líneas de un archivo de texto y estoy buscando una forma de hacer algunas manipulaciones adicionales en las líneas que no comienzan con signos de interrogación. Me gustaría una solución que no use la coincidencia de expresiones regulares. Lo que me gustaría hacer es algo como esto:¿Cuál es la forma más fácil de obtener todas las cadenas que no comienzan con un personaje?

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

que se dan cuenta el método startswith toma un argumento, pero ¿hay alguna solución sencilla para obtener todas las líneas de una línea que no comienzan con un signo de interrogación? Gracias de antemano por la ayuda.

Respuesta

21

Use las expresiones del generador, de la mejor manera que pienso.

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

O su camino:

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

O:

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

Es realmente depende de su estilo de programación. Prefiero el primero, pero tal vez el segundo parece más simple. Pero realmente no me gusta el tercero debido a una gran cantidad de sangrías.

+0

Muchas gracias por la ayuda! – drbunsen

2

Algo como esto es probablemente lo que está buscando:

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

Aquí es un bonito de una sola línea, que está muy cerca del lenguaje natural. definición

Cadena:

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

Código que realiza la escritura:

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