Dec 4, 2008

Python 文件操作

1. 常规操作 -file 类
常用于文件读写操作
常用方法: file, open, read, readline(), readlines(),write(),
writelines(), seek(), tell(),flush(), close()
属性:name, mode, isatty, closed

2. 获取文件信息:os, stat, time
os.stat()
os.lstat()

stat模块获取详细文件信息

fileStats = os.stat(filename)
fileInfo = {
'Size' : fileStats [ stat.ST_SIZE ],
'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ),
'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ),
'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ),
'Mode' : fileStats [ stat.ST_MODE ]
}

3. 通过os.path获取一些文件信息
文件是否存在、是否是一个目录、...
获取文件大小、创建、访问、修改时间

4. 目录操作
os.listdir(dir)
os.mkdir(dir)
os.rmdir(dir)
os.mkdirs(dirs) # mkdir -p
os.rmdirs(dirs) # rm -r

5. 对不同类型的文件进行操作:fnmatch
import os, fnmatch

for filename in os.listdir('.'):
if fnmatch.fnmatch(filename, '*.py'):
print open(filename).read()
elif fnmatch.fnmatch(filename, '*.sh'):
print filename
elif fnmatch.fnmatch(filename, '?.txt'):
print 'Text file :', filename

*代表匹配所有字符,?匹配一个任意字符

在"fnmatch"模块,我们可以创建正则表达式来应用,只要通过 "re" 模块:
import fnmatch
import os
import re
filePattern = fnmatch.translate ( '*.txt' )
for fileName in os.listdir ( '/' ):
if re.match ( filePattern, fileName ):
print 'Text file.'


如果想从一个目录下搜索一种类型的所有文件,使用glob:
glob(pathname)
Return a list of paths matching a pathname pattern.

#!/usr/bin/env python
import glob
for filename in glob.glob('[0-9].txt'):print filename


6. 序列化数据
pickle, cpickle

#!/usr/bin/env python
import pickle
fileHandle = open('pickleFile.txt', 'w')
thisList = ['This', 2, 'is', 1, 'a', 'test']
pickle.dump(thisList, fileHandle)
fileHandle.close()

解序列
#!/usr/bin/env python
import pickle
fileHandle = open('pickleFile.txt', 'r')
thisList = pickle.load(fileHandle)
fileHandle.close()

7. 内存文件:StringIO, cStringIO

a small tip : print >> f, a_string 等价于 f.write(a_string + '\n')

No comments:

Post a Comment

您的评论将使我blog更有动力~