如何在Python中以文本模式读取文件同时计数原始字节?
我想以文本模式逐行读取一个文件,但同时我想在这个过程中插入一个步骤,用来处理字节数据,基本上就是统计到目前为止读取了多少字节。
有没有什么好的办法可以在标准库中实现这个功能(不需要手动以字节模式打开文件、查找换行符、处理编码等等)?最后我需要一个文本读取对象(用于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