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
- Python 文件操作常用操作
- [python]python操作xml文件
- Python文件操作
- python文件目录操作
- Python文件操作
- Python文件操作
- python 文件操作
- python 文件操作
- Python 文件操作
- python 文件操作
- Python文件操作
- python 文件读写操作
- Python文件读写操作
- python文件目录操作
- Python的文件操作
- python常见文件操作
- python - 文件操作
- python文件操作
- 一个技术人的知识管理方法论
- 刘汝佳黑书 pku等oj题目
- Java Web 开发配置文件web.xml,Tomcat介绍
- Java线程间通信-回调的实现方式
- About Oracle Database
- python文件操作
- android ListView 的 setOnItemClickListener方法失效解决方法
- 数位dp模板
- 设计模式(1)-状态模式(C++)
- SRM 582
- 新起点?!
- 安装LAMP(CentOS6.6)
- 循环矩阵
- hdu 2089 数位dp模板题