title python matplotlib
¿Cuál es la forma más fácil de obtener todas las cadenas que no comienzan con un personaje? (4)
Estoy tratando de analizar unos 20 millones de líneas de un archivo de texto y estoy buscando una manera de hacer más manipulaciones 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:
for line in x:
header = line.startswith(''?'')
if line.startswith() != header:
DO SOME STUFF HERE
Me doy cuenta de que el método startswith
toma un argumento, pero ¿hay alguna solución simple para obtener todas las líneas de una línea que NO empiecen con un signo de interrogación? Gracias de antemano por la ayuda.
Algo como esto es probablemente lo que buscas:
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.
Aquí hay un buen comentario de una sola línea, que es muy cercano al lenguaje natural.
Definición de la cadena:
StringList = [ ''__one'', ''__two'', ''three'', ''four'' ]
Código que realiza la escritura:
BetterStringList = [ p for p in StringList if not(p.startswith(''__''))]
Similar a la respuesta de utdemir:
from itertools import ifilterfalse # just "filterfalse" if using Python 3
for line in ifilterfalse(lambda s: s.startswith(''?''), lines):
# DO STUFF
http://docs.python.org/library/itertools.html#itertools.ifilterfalse
http://docs.python.org/dev/py3k/library/itertools.html#itertools.filterfalse
Usa expresiones generadoras, de la mejor manera que pienso.
for line in (line for line in x if not line.startswith(''?'')):
DO_STUFF
O a tu manera:
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 parezca más simple. Pero realmente no me gusta el tercero debido a una gran cantidad de sangrado.