首页 > 解决方案 > 直接搜索文件和搜索使用“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()

标签: pythonsearchstartswith

解决方案


这是有效的,因为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()形成了行列表。


推荐阅读