web-dev-qa-db-ja.com

文字で始まらないすべての文字列を取得する最も簡単な方法は何ですか?

テキストファイルから約2000万行を解析しようとしています。疑問符で始まらない行をさらに操作する方法を探しています。正規表現一致を使用しないソリューションが欲しいのですが。私がしたいのは次のようなものです:

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

startswithメソッドは1つの引数を取ることを理解していますが、疑問符で始まらない行からすべての行を取得する簡単な解決策はありますか?助けてくれてありがとう。

21
drbunsen

ジェネレーター式を使用してください。

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

本当にあなたのプログラミングスタイル次第です。私は最初のものを好むが、多分2番目のものはより単純に見える。しかし、インデントが多いので、3番目はあまり好きではありません。

40
utdemir

これは、Nice one-linerで、自然言語に非常に近いものです。

文字列の定義:

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

行為を実行するコード:

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

このようなものはおそらくあなたが求めているものです:

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.
2
g.d.d.c

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

0
JAB