open() 用于打开文件,可以对文件进行读写操作,语法如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True) -> file object
file:指定要打开的文件的文件名
mode:可选参数,指定打开文件的模式,如果不指定默认以只读模式打开文件
buffering:可选参数,设置缓冲区大小,设置缓冲区的作用是是为了减少系统的IO调用
encoding:可选参数,用于说明打开文件后,返回的数据采用的是何种编码,一般采用 utf8 或 gbk
errors:可选参数,指定 errors=strict 时,字符编码出现问题时会报错,指定 errors=ignore 时,字符编码出现问题时会忽略
newline:可选参数,用于指定换行符,如果是Linux文件我们可以指定
是换行符,如果是Windows文件我们可以指定
是换行符
closefd:可选参数,指定传入的 file 参数类型,指定 closefd=True 时,传入的 file 参数为文件名,指定 closefd=False 时,传入的 file 参数为文件描述符
file object:打开文件后会返回一个文件对象,Python通过文件对象的方法对文件进行读写等操作
缓冲区的几种设置方法:
(1) 如果设置为0,关闭缓冲区,有输入就直接写入磁盘文件
(2) 如果设置为1,碰到换行就会将缓冲区的数据写入磁盘文件
(3) 如果设置为大于1,缓冲区满了 n 个字节才会写入磁盘文件
打开模式:
r :以只读模式打开文件
w :以写模式打开文件,打开前会先清空文件
a :以追加模式打开文件
b :以二进制模式打开文件,适用于非文本文件,如图片、视频文件等
rb :以二进制读模式打开文件
wb :以二进制写模式打开文件
ab :以二进制追加模式打开文件
r+ :以读写模式打开文件,详解
w+ :以读写模式打开文件,详解
a+ :以读写模式打开文件,详解
rb+ :以二进制读写模式打开 (参考 r+ )
wb+ :以二进制读写模式打开 (参考 w+ )
ab+ :以二进制读写模式打开 (参考 a+ )
文件对象的方法:
read():一次性读取所有文件内容,返回一个字符串;也可以指定 read(5) 读取几个字符,通常用在大文件的循环中
readline():一次只读取一行文件内容,返回一个字符串
readlines():一次性读取所有文件内容,返回一个列表,每一行是列表的一个元素
next():返回文件的下一行,如果指针在文件末尾,再执行就会报错
flush():刷新缓冲区,直接把缓冲区的数据立刻写入文件
write():用于写入指定的内容,需要以可写模式打开
seek():用于移动文件指针,通常使用 seek(0) 移动到文件起始位置
tell():返回移动指针的位置
close():用于关闭文件,只有关闭了文件,写操作才会被保存
简单示例:
In [1]: fd = open('1.txt', 'r') # 打开文件 In [2]: fd.read() # 读取文件内容 Out[2]: 'aaa bbb ccc ' In [3]: fd.close() # 关闭文件
通常我们用 with open() 来取代 open() ,用 with 语句的好处,就是到达语句末尾时,会自动关闭文件,不需要我们手动 close() :
In [10]: with open('1.txt', 'r') as fd: ....: data = fd.read() ....: print(data) ....: aaa bbb ccc
使用for循环遍历文件:
#!/usr/bin/env python fd = open('1.txt', 'r') for line in fd: print(line),
fd.close()
#!/usr/bin/env python with open('1.txt', 'r') as fd: for line in fd: print(line),
使用while循环遍历文件:
#!/usr/bin/env python fd = open('1.txt', 'r') while True: line = fd.readline() if not line: break print(line),
fd.close()
#!/usr/bin/env python with open('1.txt', 'r') as fd: while True: line = fd.readline() if not line: break print(line),