读取特定行并使用python忽略其他行

时间:2013-03-26 19:05:32

标签: python python-2.7

我有一个这样的文本文件:

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() 

这是我试过的代码。

5 个答案:

答案 0 :(得分:4)

我会使用以下内容:

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

通过使用上下文管理器(with ... as),文件的关闭将在您完成后自动完成。

答案 1 :(得分:2)

列表推导使这很简单:

filtered = [line for line in fp.readlines() if line.startswith("?")]

答案 2 :(得分: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)

答案 3 :(得分:1)

这不起作用吗?

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

或者,您是否可以先通过grep管道?

答案 4 :(得分:0)

或者,您可以使用line[0]获取每行的第一个字符。

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

这是可能的,因为Python中的String可以编入索引。 Python的字符串与C一样,以索引0开头。 line[0]将在索引0处为您提供一个字符,这是第一个字符。