如何在Python中以文本模式读取文件同时计数原始字节?

4 投票
1 回答
956 浏览
提问于 2025-04-19 08:50

我想以文本模式逐行读取一个文件,但同时我想在这个过程中插入一个步骤,用来处理字节数据,基本上就是统计到目前为止读取了多少字节。

有没有什么好的办法可以在标准库中实现这个功能(不需要手动以字节模式打开文件、查找换行符、处理编码等等)?最后我需要一个文本读取对象(用于CSV读取器),同时还要有一个字节计数器。

1 个回答

3

Python 2

在Python 2中,csv模块可以处理二进制文件,所以你可以直接使用file.tell()这个方法来获取文件当前的字节位置。

Python 3

在Python 3中,你不能使用text_file.tell()(这是TextIOBase的实例)——这个方法返回的数字是模糊的,可能和实际的字节位置不一致。

如果你的需求是可以接受字节位置有± bufsize的误差,那么:

file = open(filename, 'rb') # open in binary mode
text_file = io.TextIOWrapper(file, newline='') # text mode
# pass text_file to csv module
byte_offset = file.tell() # get position ± buffering

撰写回答