python文件随机读写例子

__author__ = 'Administrator'
# -*- coding: utf-8 -*-
'''
   声明一个类,该类的参数是一个字符串
   传一个文件和一个结果文件,若是该文件中包含有指定的字符串,将该行信息输出至结果文件中

'''

class FileUtil:
    def __init__(self,filename):
        self.filename = filename

    def createindexfile(self,stringdata):
        fwrite = open(self.filename,'a')
        fl2 =open("d:/bak/bak/test.index",'a+b')
        #读取到文件的最后一个位置,往前读8位,前4位为索引,后四位为数据的长度
        i = 1
        if fl2.tell() >=8:
            fl2.seek(-8,2)
            if fl2.readable():
                bindex = fl2.read(8)

                if bindex is None:
                   print (bindex +" is none")
                else:
                   i = int(bindex[0:4])+1

        indexcontent = str.format("%04d%04d"%(i,len(stringdata)))
        fl2.write(indexcontent.encode("UTF-8") )
        fwrite.write(stringdata)
        fwrite.close()
        fl2.close()

    def getmsgbyIndex(self,index):
        print(index)
        #打开索引文件读取
        fread = open(self.filename,'r')
        #打开数据文件读取
        findexread =open("d:/bak/bak/test.index",'r')
        #按索引标志读取到对应的地址,每读一次,动态增长一个数据
        istart =0
        for i in range(1,index):
            strindex = findexread.read(8)
            istart += int(strindex[4:])
        #最终读取数据返回
        strindex = findexread.read(8)
        fread.seek(istart)

        k = int(strindex[4:])
        content =fread.read(k)
        print(content+"===")
        return content

if __name__ == '__main__':
    fl = FileUtil("d:/bak/bak/test.aa")
    fl.createindexfile("123456")
    fl.createindexfile("456789100320103")
    for i in range(1,8):
      fl.getmsgbyIndex(i)
相关文章
相关标签/搜索