文件:
文件读写
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,
所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),
然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
读文件;
以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:
f = open('/Users/michael/test.txt', 'r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
f.read()
f.close()--刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入
read(),会一次性读取文件的全部内容
read(size),不能确定文件大小,
readlines(),读配置文件
readline()和seek()一起用,seek()回到起点位置如:
tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
要读取非ASCII编码的文本文件,就必须以二进制模式打开,再解码。比如GBK编码的文件:
>>> f = open('/Users/michael/gbk.txt', 'rb')
>>> u = f.read().decode('gbk')
在Python中,文件读写是通过open()函数打开的文件对象完成的。使用with语句操作文件IO是个好习惯。
写文件:
1、写新文件,覆盖原文件
2、追加内容
f = open('/Users/michael/test.txt', 'r')#读文件
f = open('/Users/michael/test.txt', 'w')#写文件
f = open('/Users/michael/test.txt', 'a')#追加,
>>> my_file=open('C:\Users\letsgo\Desktop\测试笔记\PythonCode\23234534231.txt','w')
>>> print >> my_file, "Hello there ,zhangll" #用print写入文件
操作文件和目录
'''
import os
# 重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )
'''
import os
# 删除一个已经存在的文件test2.txt
os.remove("test2.txt")
'''
把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数
操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中,这一点要注意一下
幸运的是shutil模块提供了copyfile()的函数,你还可以在shutil模块中找到很多实用函数,它们可以看做是os模块的补充
'''
import os
# 创建目录test
os.mkdir("test")
# 删除”/tmp/test”目录
os.rmdir( "/tmp/test" )
# 给出当前的目录
print os.getcwd()
'''
● File 对象方法: file对象提供了操作文件的一系列方法。
● OS 对象方法: 提供了处理文件及目录的一系列方法。
● 在 write 内容后,直接 read 文件输出会为空,是因为指针已经在内容末尾
序列化:
我们把变量从内存中变成可存储或传输的过程称之为序列化
在Python中叫pickling
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling
用Pickle保存那些不重要的数据,不能成功地反序列化也没关系
>>> d = dict(name='Bob', age=20, score=88)
>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d