如何解决直接搜索文件和搜索使用“read()”函数获得的字符串有什么区别
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()
形成了一个行列表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。