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 措辞的有用包。
我在 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 措辞的有用包。