##language:zh
'''
文章来自《Python cookbook》. 

翻译仅仅是为了个人学习,其它商业版权纠纷与此无关!
'''

-- 61.182.251.99 [<<DateTime(2004-09-24T22:52:50Z)>>]
<<TableOfContents>>
= 描述 =


随机读写文件

Credit: Luther Blissett



== 问题 Problem ==

从由固定长度的记录组成的文件中读取某处的一条2进制记录,而无需顺序读取一条条记录。 

== 解决 Solution ==

文件中一条记录相对于文件头的字节位移是记录块大小与记录索引(从0开始)的乘积。可以这样,使用'''seek''',然后读取:
{{{
#!python
thefile = open('somebinfile', 'rb')
thefile.seek(record_size * record_number)
buffer = thefile.read(record_size)
}}}
== 讨论 Discussion ==

此方法仅适用于如下文件:文件(一般是2进制文件)包含的记录具有一致、固定大小, 而对于处理普通文本文件并不适和。为清晰起见,脚本中使用了'''rb'''作为open的第2个参数,以2进制打开文件,以备读取。当然,并不需要在第一次seek前打开文件,只要文件以2进制打开,可以在文件最后被关闭前多次使用seek和read.   

== 参考 See Also ==

Python库参考file对象部分;

Perl Cookbook Recipe 8.12