文件操作
Python封装操作系统读写文件的API,用法与C兼容。进行文件读写的时候,由于操作磁盘上文件的行为都是由操作系统完成的,所以需要请求操作系统打开文件对象(也称之为文件描述符),接着通过操作系统提供的接口从文件对象中读取或写入数据。
读取文件
Python内置open()
函数可以读取文件,如果文件不存在则抛出IOError
:
1 | # r 表示 只读 |
如果文件打开成功,接着可以调用read()
函数一次读取文件全部内容,并返回一个str
对象。要记住:在文件使用完毕后必须要进行关闭
:
1 | f.read() |
在进行文件操作的时候,都有可能产生IOError
错误,我们也可以捕获这个错误:
1 | try: |
Python中使用with
语句来简化调用形式,可以自动调用close()
方法:
1 | with open('/User/1.txt', 'r') as f: |
常用的读取文件的函数:
read()
函数一次性读取文件全部内容read(size)
函数每次最多读取 size 个字节readline()
函数每次读取一行内容readlines()
函数一次读取所有内容并按行返回list
读取二进制文件:
1 | # 读取视频、图片等二进制文件 |
字符串编码:
open()
函数还可以接受两个参数,第一个参数是将读取的字符编码进行编码,如果文件中出现非法编码的字符串,会抛出UnicodeDecodeError
错误。这种情况,还可以接受第二个参数:errors
。可以直接忽略编码出现的错误:
1 | f = open('/Users/1.txt', 'r', encoding='gbk', errors='ignore') |
写文件
写操作和读操作差不多,主要区别是open()
函数的文件权限标示符不一致:w
或wb
表示写文本文件或写二进制文件。当然,写操作完成一定要调用close()
来关闭文件,也可以像上面那样使用with
语句。
1 | with open('/Users/test.txt', 'w') as f: |
如果想写入特定编码的文本,可以给open()
函数传入encoding
参数将字符串转为指定编码。
读写内存中的文件
StringIO
在内当中读写字符串:
1 | from io import StringIO |
也可以用字符串初始化一个StringIO,然后,像读文件一样读取:
1 | from io import StringIO |
BytesIO
读取内存中的二进制数据:
1 | from io import BytesIO |
用bytes初始化BytesIO,然后读取它:
1 | from io import BytesIO |
操作文件
Python内置的os
模块可以直接调用操作系统提供的接口,只需要import os
模块:
1 | import os |
操作文件和目录
操作文件和目录一般在os
和os.path
模块中。
1 | # 查看蛋清目录的绝对路径 |
序列化
Python中的pickle
模块提供对象序列化功能
1 | import pickle |
在序列化 JSON 的时候,我们也可以这样做:
1 | # 序列化 JSON |
dump()函数还接受不同的参数,来序列化自定义的对象:
1 | import json |