gpt4 book ai didi

python 在 readline() 之后调用 read() 没有得到整个 rest 文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:26:21 25 4
gpt4 key购买 nike

我读取了一个文件并在 readline() 之后调用了 read(),但是 read() 函数没有返回其余的内容。

我想使用编解码器读取名为“test.txt”的 utf-8 文件。内容如下:

1572278
#*OQL[C++]: Extending C++ with an Object Query Capability.
#@José A. Blakeley
#year1995

以及我使用的代码:

import codes;
a = codecs.open('test.txt','r','utf-8');
b = a.readline();
c = a.read();

当我运行它时,我得到的是:

b:1572278
c:#*OQL[C++]: Extending C++ with an Object Query Capability.\r\n#@J

这里,c 不是整个文件的其余部分 - 我无法弄明白。

最佳答案

这是因为 StreamReaderWriter 的工作方式。当你执行 readline() 时,它会填充一个 linebuffer,当你调用 read() 时,它不是空的,读取 codecs.py 代码,这将快捷方式返回缓冲区中的任何内容,除非您指定适用于您的输入文件的 size

如果你想使用 os.path.getsize 作为 read() 的提示:

>>> import os
>>> a = codecs.open('test.txt', 'r', 'utf-8'); a.readline(); a.read(os.path.getsize('test.txt'))
u'1572278\n'
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'

因为你正在吞噬文件;您可以先这样做,然后在顶部使用 StringIO

>>> import StringIO
>>> a = codecs.open('test.txt', 'r', 'utf-8');
>>> buff = StringIO.StringIO(a.read())
>>> buff.readline()
u'1572278\n'
>>> buff.read()
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'

另一个简单的解决方案是调用 read() 两次,一次获取缓冲输出,另一次获取其余部分。

>>> a = codecs.open('test.txt', 'r', 'utf-8'); a.readline(); a.read() + a.read()
u'1572278\n'
u'#*OQL[C++]: Extending C++ with an Object Query Capability.\n#@Jos\xe9 A. Blakeley\n#year1995\n'

关于python 在 readline() 之后调用 read() 没有得到整个 rest 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com