readline() returns 一次一个字符

readline() returns a character at a time

我在 Windows 10 上使用 Python 3.6.4 和 Fall Creators Update。我正在尝试使用以下代码读取 XML 文件:

with open('file.xml', 'rt', encoding='utf8') as file:
    for line in file.readline():
        do_something(line)

readline() 在每次调用时返回单个字符,而不是整行。该文件是在 Linux 上生成的,绝对编码为 UTF8,没有任何特殊之处,例如开头的 BOM,并且已通过十六进制转储验证包含有效数据。行尾是 0x0a 因为它来自 Linux。我尝试将 -1 指定为 readline() 的参数,这应该是默认值,行为没有任何变化。该文件非常大 (>240GB),但问题出现在文件开头。

关于我可能做错了什么有什么建议吗?

readline() 将 return 一行作为字符串(然后对其进行迭代)。您可能应该改用 readlines(),因为这会给您一个行列表,您的 for-loop 将迭代这些行,一次一行。

更好,更高效:

    for line in file:
        do_something(line)

readline() returns 表示文件中一行的字符串,而 readlines() returns 一个列表,每个项目都是一行。所以很明显

for line in file.readline()

正在迭代一个字符串,这就是你得到一个字符的原因

如果您想遍历文件并避免阻塞您的内存,请尝试以下操作:

line = '1'
while line:
    line = f.readline() 
    if !line:
        break
    do_something(line)

或:

line = f.readline()
while line:
    do_something(line)
    line = f.readline()

顺便说一下,beautifulsoup 是 xml 措辞的有用包。