python 获取所有不以字符开头的字符串的最简单方法是什么?

k97glaaz  于 2022-12-28  发布在  Python
关注(0)|答案(4)|浏览(205)

我正在尝试解析一个文本文件中的大约2000万行,并且正在寻找一种方法来对不以问号开头的行进行进一步的操作。我希望有一个不使用正则表达式匹配的解决方案。我想做的事情如下:

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

我知道startswith方法只需要一个参数,但是有没有简单的解决方案可以从一行中获取所有不以问号开头的行?

azpvetkf

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

这真的取决于你的编程风格。我喜欢第一个,但也许第二个似乎更简单。但我真的不喜欢第三个,因为有很多缩进。

jq6vz3qz

jq6vz3qz2#

这是一个很好的一行程序,非常接近自然语言。
字符串定义:

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

执行契约的代码:

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

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.
mrfwxfqh

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.ifilterfalse
http://docs.python.org/dev/py3k/library/itertools.html#itertools.filterfalse

相关问题