读写二进制文件
文本文件使用字符序列来存储数据,而二进制文件使用字节序列存储数据,它只能被特定的读取器读取。Python中pickle模块可以将数据序列化。
序列化是指将对象转化成一系列字节存储到文件中,而反序列化则相反,是指程序从文件中读取信息并用来重构上一次保存的对象。
pickle模块中dump()函数可以实现序列化操作,其语法格式如下:
dump(obj, file, [,protocol = 0])
该函数表示将对象obj保存到文件file中,参数protocol是序列化模式,默认值为0,表示以文本的形式序列化,protocol的值还可以是1或2,表示以二进制的形式序列化。
pickle模块中load ()函数可以实现反序列化操作,其语法格式如下:
load(file)
该函数表示从文件file中读取一个字符串,并将它重构为原来的python对象。
接下来演示使用pickle模块实现序列化和反序列化操作,如下所示。
1 import pickle # 导入pickle模块
2 data1 = {'小鱼': [18, '女', 100],
3 '小隼': [19, '男', 98.5],
4 '隼与鱼': [18, '男', 60] }
5 data2 = ['简书', 'Python', '作者']
6 with open('test.dat', 'wb') as f1:
7 pickle.dump(data1, f1) # 将字典序列化
8 pickle.dump(data2, f1, 1) # 将列表序列化
9 with open('test.dat', 'rb') as f2:
10 data3 = pickle.load(f2) # 重构字典
11 data4 = pickle.load(f2) # 重构列表
12 print(data3, data4)
运行结果如下图所示。
在上例中,第7、8行通过dump()函数将data1与data2进行序列化后写入test.dat文件中,第10、11行通过load()函数从文件test.dat中读取数据并进行反序列化操作。
定位读写位置
文件指针是指向一个文件的指针变量,用于标识当前读写文件的位置,通过文件指针就可对它所指的文件进行各种操作。
tell()方法可以获取文件指针的位置,其语法格式如下:
文件对象.tell()
该方法返回一个整数,表示文件指针的位置,如下所示。
1 with open('test.txt', 'w+') as f:
2 n = f.tell() # 文件指针指向文件头,值为0
3 print(n)
4 f.write('www.jianshu.com')
5 n = f.tell() # 文件指针指向文件尾
6 print(n)
运行结果如下图所示。
在上例中,第2行获取文件指针位置为0,表示处于文件头,第4行向文件中写入字符串'
www.jianshu.com'
,长度为15,此时文件指针处于文件尾。
seek()方法可以移动文件指针位置,其语法格式如下:
文件对象.seek((offset[, where = 0]))
其中,参数offset表示移动的偏移量,单位为字节,其值为正数时,文件指针向文件尾方向移动,其值为负数时,文件指针向文件头方向移动。参数where指定从何处开始移动,其值可以为0、1、2,具体含义如下所示:
-
0:表示文件头
-
1:表示当前位置
-
2:表示文件尾
接下来演示seek()方法的使用,如下所示。
1 with open('test.txt', 'w+') as f:
2 print(f.tell()) # 文件指针处于文件头
3 f.write('jianshu/com')
4 print(f.tell()) # 文件指针处于文件尾
5 f.seek(7,0) # 文件指针处于位置7
6 print(f.tell())
7 f.write('.')
8 print(f.tell())
运行结果如下图所示。
程序运行结束后, test.txt文件内容如下图所示。
在上例中,通过移动文件指针将
/
替换为
.
。
复制文件
在日常生活中,文件经常需要从一个路径下复制到另一个路径下。在Python中,shutil模块的copy()函数可以实现复制文件,其语法格式如下:
shutil.copy(src, dst)
该函数表示将文件src复制为dst,如下所示。
1 import shutil # 导入shutil模块
2 shutil.copy('E:/study/随笔/Python基础1/test.txt', 'copytest.txt')
程序运行结束后,在目录“E:/study/随笔/Python基础1”会生成一个copytest.txt文件。
移动文件
在日常生活中,文件经常需要从一个路径下移动到另一个路径下。在Python中,shutil模块的move ()函数可以实现复制文件,其语法格式如下:
shutil.move(src, dst)
该函数表示将文件src移动到dst,如下所示。
1 import shutil # 导入shutil模块
2 shutil.move('E:/study/随笔/Python基础1/copytest.txt', '../copytest.txt')
程序运行结束后,文件copytest.txt从目录“E:/study/随笔/Python基础1/”移动到目录“E:/study/随笔/”。
重命名文件
在Python中,os模块的rename()函数可以重命名文件,其语法格式如下:
os.rename(src, dst)
该函数表示将src重名为dst,如下所示。
1 import os # 导入os模块
2 os.rename('E:/study/随笔/copytest.txt', 'E:/study/随笔/copytest1.txt')
程序运行结束后,文件copytest.txt被重名为“copytest1.txt”。
删除文件
在Python中,os模块的remove ()函数可以删除文件,其语法格式如下:
os.remove(src)
该函数表示将文件src删除,如下所示。
1 import os # 导入os模块
2 os.remove('E:/study/随笔//copytest1.txt')
程序运行结束后,文件copytest1.txt被删除。