一,python文件操作处理
python常用,主要是用于文件操作,配合字符串操作,数值计算等,完成数据处理。
二、python文件模式
打开一个文件,返回一个文件对象。可以用open()或者file(),建议使用前者
file_name:打开的文件名,若非当前路径,需指出具体路径
mode:可选参数,文件打开模式
bufsize:可选参数,是否使用缓存
mode
模式 描述
r 以读方式打开文件,可读取文件信息.文件必须已存在
w 以写方式打开文件,可向文件写入信息。存在则清空,不存在创建
a 以追加方式打开文件,文件指针自动移到文件尾。追加
r+ 以读写方式打开文件,可对文件进行读和写操作。
w+ 消除文件内容,然后以读写方式打开文件。
a+ 以读写方式打开文件,并把文件指针移到文件尾。
b 以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的
U 通用换行符支持,任何系统下的文件, 不管换行符是什么, 使用U模式打开时, 换行符都会被替换为NEWLINE(n)
+ 代表同时作为输入和输出文件,可以对相同文件进行读写
b代表二进制数据处理
和 r/w/a组合.r+ 使用读写方式打开, rb二进制读
注意,在mode中使用b,b不能作为第一个字符出现。
bufsize
bufsize取值 描述
0 禁用缓冲
1 行缓冲,只缓冲一行
>1 指定缓冲区的大小,定制
<1 系统默认的缓冲区大小,m默认
三、文件对象属性
常用几个:
例子:
文件操作
获取帮助
dir(f)
help(f.seek)
操作列表
#读
file.read(size=-1) 从文件读取size个字节,未给定或为负,读取所有
file.readline(size=-1) 读取并返回一行,或返回最大size个字符,包括n
file.readlines(sizeint=0) 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区
#写
file.write(str) 向文件中写入字符串(文本或二进制)
file.writelines(seq) 写入多行,向文件中写入一个字符串列表,注意,要自己加入每行的换行符
#其他
file.seek(off,whence=0) 从文件中给移动指针,从whence(0起始,1当前,2末尾)偏移off个字节,正结束方向移动,负往开始方向移动
file.tell() 返回当前文件中的位置。获得文件指针位置
file.truncate(size=file.tell()) 截取文件到最大size个字节,默认为当前文件位置
file.close() 关闭打开的文件,垃圾回收机制也会在文件对象的引用计数降至0的时候自动关闭文件
file.fileno() 返回文件描述符(file descriptor FD 整型)是一个整数, 可以用在如os模块的read方法等一些底层操作上.
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入.
file.isatty() 判断file是否是类tty设备
file.next() 返回文件下一行
1.养成手动close
2.读取大文件
方法一:一次性读入,去左右空白+换行符,文件太大不建议这么做
方法二:迭代
3.上下文管理器用with,等价与上面方法二,注意不用显式close
StringIO
StringIO“虚拟文件”不是永久的
如果不保存它(如将它写入一个真正的文件,或者使用 shelve 模块或数据库),则程序结束时,它将消失
>>> import cStringIO
>>> fs = cStringIO.StringIO()
>>> fs.write('hello world')
>>> fs.getvalue()
'hello world'
pickle
pickle任意python对象和字符串之间的序列化类似java序列化存储到文件的过程
# encoding: utf-8
import pickle
d = {'a':1,'b':2}
f = open('datafile.pkl','wb')
pickle.dump(d,f)
f.close()
f=open('datafile.pkl','rb')
e=pickle.load(f)
print e
struct
能够构造并解析打包的二进制数据
#!/usr/bin/env python
# encoding: utf-8
import struct
f = open('data.bin','wb')
data = struct.pack('hhl', 1, 2, 3)
f.write(data)
f.close()
f = open('data.bin','rb')
data = f.read()
values = struct.unpack('hhl',data)
print values
其他相关模块