我正在尝试解析来自文本文件的大约2000万行,并寻找一种方法对不以问号开头的行进行进一步的操作,我希望找到一种不使用正则表达式的解决方案。我想要做的是这样的:
for line in x:
header = line.startswith('?')
if line.startswith() != header:
DO SOME STUFF HERE
我知道startswith
方法只接受一个参数,但是否有简单的解决方案可以获取所有不以问号开头的行?
我正在尝试解析来自文本文件的大约2000万行,并寻找一种方法对不以问号开头的行进行进一步的操作,我希望找到一种不使用正则表达式的解决方案。我想要做的是这样的:
for line in x:
header = line.startswith('?')
if line.startswith() != header:
DO SOME STUFF HERE
我知道startswith
方法只接受一个参数,但是否有简单的解决方案可以获取所有不以问号开头的行?
使用生成器表达式是我认为最好的方法。
for line in (line for line in x if not line.startswith('?')):
DO_STUFF
或者使用你的方式:
for line in x:
if line.startswith("?"):
continue
DO_STUFF
或者:for line in x:
if not line.startswith("?"):
DO_STUFF
这取决于你的编程风格。我更喜欢第一个,但第二个似乎更简单。但是第三个我不太喜欢,因为它需要很多缩进。
这里有一个非常接近自然语言的好的一行代码。
字符串的定义:
StringList = [ '__one', '__two', 'three', 'four' ]
执行此操作的代码:
BetterStringList = [ p for p in StringList if not(p.startswith('__'))]
也许您需要类似这样的内容:
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.
类似于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