python 读写文件
0,文件有两种类型:文本文件和二进制文件。
1,首先用到内置的open()函数,创建一个stream对象。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
常用的参数三个:1,file文件名;2,mode文件打开模式;3,encoding编码(只对文本文件有效)
mode打开模式:
'r' open for reading (default)
'w' open for writing, truncating the file first
'x' create a new file and open it for writing
'a' open for writing, appending to the end of the file if it exists
'b' binary mode
't' text mode (default)
'+' open a disk file for updating (reading and writing)
'U' universal newline mode (deprecated)
2,读取一个文本文件:
file = open("test.txt")
data = file.read()
file.close()
这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是处理异常的加强版本:
file = open("test.txt")
try:
data = file.read()
finally:
file.close()
虽然这段代码运行良好,但是太冗长了。这时候就是with一展身手的时候了。
with open("test.txt") as file:
data = file.read()
3,面对文本文件,对象提供了三个“读”方法:read()、readline()和readlines()。每种方法可以接受一个变量以限制每次读取的数据量。
read()每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
readlines()一次读取整个文件,自动将文件内容分析成一个行的列表。
readline() 每次只读取一行。
注意:
这三种方法是把每行末尾的'\n'也读进来了,它并不会默认的把'\n'去掉,需要我们手动去掉。字符串的rstrip('\n')方法去掉后面的字符'\n'
文件对象提供了两个“写”方法: write() 和 writelines()。
4,遍历文件的所有行,也可以用遍历文件对象的方式:
for line in file:
print(line)
5,文件对象的位置
前面的例子中,我们已经读到文件的末尾,如果要再从头读的话就要调用f.seek(0)来设置文件对象的位置到文件开头。
这个方法有两个参数:f.seek(cookie, whence=0)
cookie 是位置偏移量
whence 是相对位置,它有三种相对位置:
0 文件开头,偏移量是0或整数;
1 当前位置,偏移量可以是负数;
2 文件末尾,偏移量通常是负数;
如何查看当前位置呢?调用f.tell()方法。
6,字符编码
对于文本文件,可能需要给open()函数传入encoding参数,例如,读取utf-8编码的文件:
f = open('test.txt', 'r', encoding='utf-8')
f.read()
遇到有些编码不规范的文件,open()函数还可以接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
f = open('test.txt', 'r', encoding='gbk', errors='ignore')