文件处理的函数和方法
使用open()函数可打开文件,语法格式如下:
代码如下:
file_handler = open(filename,[,mode[,bufsize]]
filename是你要操作的文件名,如果不在当前路径,需指出具体路径。mode是打开文件的模式,表示你要如何操作文件,bufsize表示是否使用缓存。
mode
模式
描述
r
以读方式打开文件,可读取文件信息。
w
以写方式打开文件,可向文件写入信息。
a
以追加方式打开文件,文件指针自动移到文件尾。
r+
以读写方式打开文件,可对文件进行读和写操作。
w+
消除文件内容,然后以读写方式打开文件。
a+
以读写方式打开文件,并把文件指针移到文件尾。
b
以二进制模式打开文件,而不是以文本模式。该模式只对windows或dos有效,类unix的文件是用二进制模式进行操作的。
bufsize
bufsize取值
描述
0
禁用缓冲
1
行缓冲
>1
指定缓冲区的大小
>> myfile=open(‘myfile’,’w’)
>>> myfile.write(‘hello,myfile!\n’)
>>> myfile.close()
>>> myfile=open(‘myfile’)
>>> myfile.readline()
‘hello,myfile!\n’
>>> myfile.readline()
”
把一行文本写成字符串,包含行终止符\n,写入方法不会为我们添加行终止符
在文件中存储并解析python对象
必须使用转换工具把对象转换成字符串,注意文件数据在脚本中一定是字符串,而写入方法不会自动地替我们做任何向字符串格式转换的工作
代码如下:
>>> x,y,z=43,324,34
>>> s=’spam’
>>> d={‘a’:1,’b’:2}
>>> l=[1,2,3]
>>> f=open(‘datafile.txt’,’w’)
>>> f.write(s+’\n’)
>>> f.write(‘%s,%s,%s\n’%(x,y,z))
>>> f.write(str(l)+’$’+str(d)+’\n’)
>>> f.close()
一旦我们创建了文件爱你就可以通过打开和读取字符串来查看文件的内容,而print语句则会解释内嵌行终止符来给用户满意的结果:
代码如下:
>>> bytes=open(‘datafile.txt’).read()
>>> bytes
“spam\n43,324,34\n[1, 2, 3]${‘a’: 1, ‘b’: 2}\n”
>>> print bytes
spam
43,324,34
[1, 2, 3]${‘a’: 1, ‘b’: 2}
鉴于python不会自动把字符串转换为数字或其他类型的对象,需要使用诸如索引、加法等普通对象工具
代码如下:
>>> f=open(‘datafile.txt’)
>>> line=f.readline()
>>> line
‘spam\n’
>>> line=f.readline()
>>> line
‘43,324,34\n’
>>> parts=line.split(‘,’)
>>> parts
[’43’, ‘324’, ’34\n’]
>>> int(parts[1])
324
>>> numbers=[int(p) for p in parts]
>>> numbers
[43, 324, 34]
>>> line=f.readline()
>>> line
“[1, 2, 3]${‘a’: 1, ‘b’: 2}\n”
>>> parts=line.split(‘$’)
>>> parts
[‘[1, 2, 3]’, “{‘a’: 1, ‘b’: 2}\n”]
>>> eval(parts[0])
[1, 2, 3]
>>> objects=[eval(p) for p in parts]
>>> objects
[[1, 2, 3], {‘a’: 1, ‘b’: 2}]
用pickle存储python的原生对象
使用eval可以把字符串转换成对象,pickle模块是能够让我们直接在文件中存储几乎任何python对象的高级工具,并不要求把字符串转换来转换去
代码如下:
>>> f=open(‘datafile.txt’,’w’)
>>> import pickle
>>> pickle.dump(d,f)
>>> f.close()
>>> f=open(‘datafile.txt’)
>>> e=pickle.load(f)
>>> e
{‘a’: 1, ‘b’: 2}
pickle模块执行所谓的对象序列化,也就是对象和字节字符串之间的互相转换