缓冲区/流在Python中读取文件的子集?

时间:2016-12-15 18:45:24

标签: python python-3.x io

我编写了一个类来解析数据文件的标题段(用于存储科学仪器数据),并将偏移等内容收集到文件中的各个数据段。实际数据是通过读取和解析数据段的各种方法获得的。

我遇到的问题是为特定于供应商的非结构化数据定义了一个段。由于没有什么要解析我只需要我的方法来返回原始二进制数据。但是这个段可能非常大,所以我不想只是一次读取它并返回一个bytes对象。

我想要做的是让方法将io.BufferedReader对象或类似对象返回到仅在开始和结束偏移之间读取的文件中。我还没有找到使用内置IO类的方法。有可能吗?

1 个答案:

答案 0 :(得分:0)

您继承了IOBase中的所有类方法,因此您绝对可以调用reader.seek(byte_offset)来跳转到流中的此字节位置。但是,从那里开始,您必须手动跟踪已读取的字节,直到达到要读取的最大偏移量。 seek()的起始偏移当然必须事先知道,结束字节偏移也是如此。下面是一些示例代码(假设字节250的起始偏移量):

import io

stream = io.open("file.txt", "r")
buffered_reader = io.BufferedReader(stream)
# set the stream to byte 250
buffered_reader.seek(250)
# read up to byte 750 (500 bytes from position 250)
data = buffered_reader.read(500)

当然,如果此标题是动态调整的大小......您必须扫描以确定开始位置,这意味着逐行读取。