1

私はこのようなテキストファイルを持っています:

input file
yuorvsdsd
dfdsfsd
?dsfsdfsd
sdfsdfs
?dfd
ds

で始まる行だけを読み取るようにしようとしてい?ます。このreadlines関数はすべての行を読み取るので、条件を設定しましたが、正確な結果が表示されないため、満足できません。私はなりたいoutput

?dsfsdfsd
?dfd

プログラム

fp = open("file.txt")
z = fp.readlines
if z=='?':
    print z
fp.close() 

これは私が試したコードです。

4

5 に答える 5

4

私は次のようなものを使用します:

with open("file.txt") as fp:
    for line in fp:
        if line.startswith('?'):
            print line

コンテキストマネージャー(with ... as)を使用すると、ファイルの終了後にファイルが自動的に閉じられます。

于 2013-03-26T19:09:18.847 に答える
2

リスト内包表記はこれを簡単にします:

filtered = [line for line in fp.readlines() if line.startswith("?")]
于 2013-03-26T19:11:12.700 に答える
2

私はジェネレータ式を使うと思います:

(line for line in open('file.txt') if line.startswith('?'))

完全なプログラムは次のようになります。

lines = (line for line in open('file.txt') if line.startswith('?'))
print ''.join(lines)
于 2013-03-26T19:22:50.653 に答える
1

これは機能しませんか?

with open("file.txt") as fin:
    for line in fin:
        if not line.startswith('>'):
            print line

grepあるいは、これを最初にパイプするだけではいけませんか?

于 2013-03-26T19:09:26.037 に答える
0

または、を使用line[0]して各行の最初の文字を取得することもできます。

with open("file.txt") as fp:
    for line in fp:
        if line[0] == '?':
            print line

これが可能なのは、Pythonの文字列にインデックスを付けることができるためです。Pythonの文字列は、Cと同様に、インデックスで始まります0line[0]最初の文字であるインデックス0の文字が表示されます。

于 2013-03-26T19:14:29.753 に答える