我正在尝试解析一个文本文件中的大约2000万行,并且正在寻找一种方法来对不以问号开头的行进行进一步的操作。我希望有一个不使用正则表达式匹配的解决方案。我想做的事情如下:
for line in x: header = line.startswith('?') if line.startswith() != header: DO SOME STUFF HERE
我知道startswith方法只需要一个参数,但是有没有简单的解决方案可以从一行中获取所有不以问号开头的行?
startswith
azpvetkf1#
使用生成器表达式,我认为这是最好的方法。
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
这真的取决于你的编程风格。我喜欢第一个,但也许第二个似乎更简单。但我真的不喜欢第三个,因为有很多缩进。
jq6vz3qz2#
这是一个很好的一行程序,非常接近自然语言。字符串定义:
StringList = [ '__one', '__two', 'three', 'four' ]
执行契约的代码:
BetterStringList = [ p for p in StringList if not(p.startswith('__'))]
bvjveswy3#
类似这样的东西可能就是你想要的:
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.
mrfwxfqh4#
与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.ifilterfalsehttp://docs.python.org/dev/py3k/library/itertools.html#itertools.filterfalse
4条答案
按热度按时间azpvetkf1#
使用生成器表达式,我认为这是最好的方法。
或者你的方式:
或者:
这真的取决于你的编程风格。我喜欢第一个,但也许第二个似乎更简单。但我真的不喜欢第三个,因为有很多缩进。
jq6vz3qz2#
这是一个很好的一行程序,非常接近自然语言。
字符串定义:
执行契约的代码:
bvjveswy3#
类似这样的东西可能就是你想要的:
mrfwxfqh4#
与utdemir的回答相似:
http://docs.python.org/library/itertools.html#itertools.ifilterfalse
http://docs.python.org/dev/py3k/library/itertools.html#itertools.filterfalse