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

我想我会使用生成器表达式:

(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 回答
2

列表推导使这变得简单:

filtered = [line for line in fp.readlines() if line.startswith("?")]
于 2013-03-26T19:11:12.700 回答
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 中的 String 可以被索引。Python 的 String 和 C 一样,以 index 开头0line[0]将在索引 0 处为您提供一个字符,这是第一个字符。

于 2013-03-26T19:14:29.753 回答