我使用以下代码成功搜索了一个文件:
fhand = open('mbox-short.txt')
for line in fhand:
if fhand.startswith("From"):
print(line)
但是,如果我尝试将文件读取到字符串(inp
(中并执行相同的搜索,则不会得到任何输出:
fhand = open('mbox-short.txt')
inp = fhand.read()
for line in inp:
if inp.startswith('From:'):
print(line)
我想知道为什么我不能查询我的inp
字符串。请假设文件大小不太大。如果我可以使用len()
查询inp
,为什么不能使用startswith()
?
这是因为for
循环实际上是从文件中读取行:
fhand = open('mbox-short.txt')
for line in fhand:
if line.startswith('From:'):
print(line)
这里,fhand是一个文件句柄,当您对它进行迭代时,我们可以访问文件中的每一行。这里,line是一个字符串,有一个.startswith
的方法,我们可以用它来检查它是否以某个特定短语开头。
这不起作用:
fhand = open('mbox-short.txt')
inp = fhand.read()
for line in inp: # wrong this is char by char - not lines
if inp.startswith('From:'): # wrong since inp is the whole string
print(line)
fhand.read()
返回文件中的整个文本块,当您对其进行迭代时,它会返回文本块中的每个字符。如果您使用startswith('From:')
,这将永远不会是真的,因为它只比较单个字符。
你可以这样"修复"第二个:
fhand = open('mbox-short.txt')
inp = fhand.read()
for line in inp.splitlines():
if line.startswith('From:'):
print(line)
现在您将在字符串的行上循环,而不是在字符上循环,因为.splitlines()
形成了一个行列表。