如何模仿Python中的随机访问文件

时间:2018-12-07 16:08:21

标签: python randomaccessfile

因此,我正在教授的课程要求讲授随机文件的概念-课程内容指定文件的大小/长度固定,每个位置都包含一条记录,以及存储/存储位置。通过散列函数确定从中读取数据(以多种方式处理冲突)。尽管我对理论和用于解释该概念的伪代码感到满意,但我不得不承认,我正在努力将其转变为合适的Python代码。

我需要的是能够

  • 使用键值和哈希函数确定文件中的行号(我可以做这部分)
  • 跳转到指定文件中的该行/位置
  • 修改或读取该行/该位置上的数据

在做一些研究时,我已经看到过几次提到酸洗和贴图的问题,但是不确定这是否是最好的方法。非常感谢您的指导。

1 个答案:

答案 0 :(得分:0)

问题可以分为两部分:

  1. 确定记录的(二进制?)固定长度格式,并能够从中序列化/反序列化数据;结果必须是固定长度的字节串。
  2. 在文件中查找和读取/写入此类记录。

对于第1点,有很多可能性。您可以使用struct模块来生成/读取通常为长度的二进制数据。

一种较低技术但仍然有效的方法是仅使用固定大小的文本记录,每个字段都用空白或其他适当填充。这些可以很容易用bytes.format生成,并在使用普通切片读取时拆分。

请注意,为使此方法正常运行,必须将字段充分格式化/填充为 byte 字符串,而不是unicode字符串(如果要将记录组成为Unicode字符串和< em> then 将其转换为UTF-8,它可能会更改长度,因为UTF-8是可变长度编码)。

对于第二部分,这是最简单的:只需以二进制模式打开文件 (您不希望换行符弄乱您的字节),请使用seek方法移至您需要的记录(使用记录数乘以其大小作为位置)进行读取/写入,然后使用read(传递记录大小)或write(传递适当的大小)记录)。