J'essaie d'analyser environ 20 millions de lignes d'un fichier texte et je cherche un moyen de faire d'autres manipulations sur des lignes qui ne commencent pas par des points d'interrogation. Je voudrais une solution qui n'utilise pas l'appariement regex. Ce que j'aimerais faire est quelque chose comme ceci:
for line in x:
header = line.startswith('?')
if line.startswith() != header:
DO SOME STUFF HERE
Je réalise que la méthode startswith
prend un argument, mais existe-t-il une solution simple pour obtenir toutes les lignes d'une ligne qui NE COMMENCE PAS par un point d'interrogation? Merci d'avance pour l'aide.
Utilisez des expressions de générateur, la meilleure façon que je pense.
for line in (line for line in x if not line.startswith('?')):
DO_STUFF
Ou à votre façon:
for line in x:
if line.startswith("?"):
continue
DO_STUFF
Ou:
for line in x:
if not line.startswith("?"):
DO_STUFF
Cela dépend vraiment de votre style de programmation. Je préfère le premier, mais peut-être que le deuxième semble plus simple. Mais je n'aime pas trop le troisième en raison de nombreuses indentations.
Quelque chose comme ceci est probablement ce que vous recherchez:
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.
Voici un Nice one-liner, qui est très proche du langage naturel.
Définition de la chaîne:
StringList = [ '__one', '__two', 'three', 'four' ]
Code qui réalise l'acte:
BetterStringList = [ p for p in StringList if not(p.startswith('__'))]
Similaire à la réponse d'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