专栏名称: 隼与鱼
目录
相关文章推荐
51好读  ›  专栏  ›  隼与鱼

文件操作(三)

隼与鱼  · 简书  ·  · 2019-04-05 08:49

正文

请到「今天看啥」查看全文


读写二进制文件

文本文件使用字符序列来存储数据,而二进制文件使用字节序列存储数据,它只能被特定的读取器读取。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被删除。







请到「今天看啥」查看全文