上一篇主要讲了使用Python进行文件的读取工作,这里在此基础上对上一篇进行补充~
文件处理操作
一、使用迭代器访问文件
f = open("haha.txt")
iter_f = iter(f) //迭代器
lines = 0
for line in iter_f:
lines += 1
print lines
二、文件指针
文件指针的用处是为了进行重复的读取~
(1)操作文件指针可以通过seek方法:
seek(offset, whence):移动文件指针
offset:偏移量,可为负数
whence:偏移相对位置
(2)偏移相对位置为os模块当中的SEEK_SET、SEEK_CUR、SEEK_END:
os.SEEK_SET:表示文件的相对起始位置
os.SEEK_CUR:表示文件的相对当前位置
os.SEEK_END:表示文件的相对结束位置
import os #导入os模块
f = open('123456789.txt') #首先先创建一个文件对象,打开方式为w
print f.read(3) #用read()方法读取并打印
print f.tell() #打印出文件指针的位置
f.seek(0, os.SEEK_SET) #用seek()方法操作文件指针(把文件指针移到文件起始位置并移动0)
print f.read(3) #用read()方法再次读取并打印
print f.tell() #打印出文件指针的位置
f.close() #关闭文件
#打印结果:123
# 3
# 123
# 3
三、文件编码方式
(1)编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
(2)Python2在写入文件的时候经常会出现因字符转码错误而不能正常运行的问题,很多教程用到的解决办法是重载Python默认编码:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
(3)上面的方法比较激进,python文件编码默认为ASCII码,如果需要进行改变的话我们可以尝试借助Python的codecs模块
# 打开文件
import codecs
with codecs.open('/cxt/gbk.txt', 'r', 'gbk') as f:
f.read() # u'\u6d4b\u8bd5'
# 以gbk编码打开文件/cxt/gbk.txt,读取后直接自动转换成python内部的unicode编码。
# 写入文件
f = codecs.open('file', 'w', 'utf-8')
f.write('something')
f.close()
四、os模块
os方法 | 说明 |
---|---|
os.access(path, mode) | 判断文件权限F_OK, R_OK ,W_OK, X_OK |
os.listdir(path) | 返回当path路径下所有文件名组成的列表 |
os.remove(path) | 删除文件 |
os.rename(old, new) | 修改文件或者目录名 |
os.mkdir(path[, mode]) | 创建目录 |
os.makedirs(path[, mode]) | 创建多级目录 |
os.removedirs(path) | 删除多级目录 |
os.rmdir(path) | 删除目录(目录必须空目录) |
os.path方法 | 说明 |
---|---|
os.path.exists(path) | 当前路径是否存在/也可以判断是否有该文件 |
os.path.isdir(s) | 是否是一个目录 |
os.path.isfile(path) | 是否是一个文件 |
os.path.getsize(filename) | 返回文件大小/返回目录文件大小 |
os.path.dirname(p) | 返回路径的目录 |
os.path.basename(p) | 返回路径的文件名 |
参考资料:www.imooc.com(慕课网)