python文件操作

来源:互联网 发布:我的世界linux服务端 编辑:程序博客网 时间:2024/06/05 19:16

提供个人写的文件操作python脚本。

个人觉得不管哪个语言删除、移动都是最常用的文件操作,遗憾的是见到的语言文件库基本都不提供。不过也可以理解,这类文件操作效率太差。库的设计者指望用户使用read和write完成这类操作,效率由用户保证。

文件IO操作尤其需要注意效率,而提高效率最重要的是使用缓冲。一个字节一个字节读写完成文件操作的版本效率低的令人震惊。我已经将这个版本注释,读者有兴趣的话可以参考对比。

又一次重复发明轮子,虽然不值得提倡,不过动手实践倒是纠正了一些文件移动操作常识性误解。另外提供测试程序。欢迎拍砖。


# -*- coding: cp936 -*-# All rights reserved.# Written by soliddream <soliddream at 163.com>"""wrap file operate"""def FileDelete(fileObject,position,length):        fileSize = FileSize(fileObject)        if(fileSize<position+length):        print 'error.string deleted exceed limit when execute FileDelete'        return           fileObject.seek(position)    deletedStr = fileObject.read(length)    movedStr = fileObject.read(fileSize-position-length)    fileObject.seek(position)    fileObject.write(movedStr)    fileObject.truncate(fileSize-length)    return deletedStr    """    anotherFileObject = open(fileObject.name, 'rb')    anotherFileObject.seek(position+length)    fileObject.seek(position)    while(1):        byte = anotherFileObject.read(1)        if not byte:            break        fileObject.write(byte)    fileObject.truncate(anotherFileObject.tell()-length)    anotherFileObject.close()    """    def FileMove(fileObject,position,length,newPosition):        fileSize = FileSize(fileObject)    if((fileSize<position+length) or (fileSize<newPosition) \       or position==newPosition or position<0):        print 'error.FileMove Invalid argument'        return    fileObject.seek(position)    strmoved = fileObject.read(length)        if(position<newPosition):        lenDomino = newPosition-position-length+1        fileObject.seek(position+length)        strDomino = fileObject.read(lenDomino)        fileObject.seek(position)        fileObject.write(strDomino)        fileObject.write(strmoved)    else:        lenDomino = position-newPosition        fileObject.seek(newPosition)        strDomino = fileObject.read(lenDomino)        fileObject.seek(newPosition)        fileObject.write(strmoved)        fileObject.write(strDomino)"""    anotherFileObject = open(fileObject.name, 'rb')    anotherFileObject.seek(position)    strmoved = anotherFileObject.read(length)    forNumber = 0    if(position<newPosition):        anotherFileObject.seek(position+length)        fileObject.seek(position)        forNumber = newPosition-position    else:        anotherFileObject.seek(newPosition)        fileObject.seek(newPosition+length)        forNumber = position-newPosition    for i in range(0,forNumber):                byte = anotherFileObject.read(1)                fileObject.write(byte)    fileObject.seek(newPosition)    fileObject.write(strmoved)    anotherFileObject.close()    """def FileSearch(fileObject,subString, beginPosition=0):    fileObject.seek(beginPosition)    fileString = fileObject.read();    foundPosition = fileString.find(subString)    if foundPosition!=-1:        foundPosition += beginPosition    return foundPositiondef FileSize(fileObject):    originPosition = fileObject.tell()    fileObject.seek(0, os.SEEK_END)    fileSize = fileObject.tell()    fileObject.seek(originPosition)    return fileSizedef testMyFileFuction():    print '-----------------------'    print 'test FileDelete'    string = StringIO()    string.write('0123456789')    FileDelete(string,3,3)    string.seek(0)    if string.read()=='0126789':        print 'FileDelete OK'    else:        print 'FileDelete Failed'        print '-----------------------'    print 'test FileMove'    string.seek(0)    string.write('0123456789')    FileMove(string,3,3,0)    string.seek(0)    fileMoveResult1=string.read()    string.seek(0)    string.write('0123456789')    FileMove(string,3,3,7)    string.seek(0)    fileMoveResult2 = string.read()    if fileMoveResult1 == '3450126789' and fileMoveResult2 == '0126734589':        print 'FileMove OK'




0 0