好久没用Python,忘记Python对文件的操作,网上好多都说的乱七八糟,觉得还是自己总结一个完整版的吧,以后要是再忘了就打开翻阅。大家如果发现有错误或者有补充内容,还请在留言区斧正,非常感谢!
一、打开文件
open 函数用来打开文件,语法如下:
open(name[, mode[, buffering]])
其中:
- name 是文件名,是这里唯一的一个强制参数
- mode 是打开模式
- buffering 是缓冲的意思,在下文会对他们进行更详细的解释
假如现在有一个名为 new.txt 文本,位置在G:\text 下,那么可以这样去打开这个文件:
f = open(r'G:\text\new.txt ')
如果该目录下没有这个文件,则会报错:
>>> open(r'G:\text\new.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'G:\\text\\new.txt'
如果打开正确,则会返回一个文件对象:
>>> open(r'G:\text\new.txt')
<_io.TextIOWrapper name='G:\\text\\new.txt' mode='r' encoding='cp936'>
1.1、文件模式(mode)
为什么会有文件模式呢?
当open函数只有一个文件名参数时,我们可获得一个文件对象,但是如果我们要向文件写入内容,就得提供一个模式参数
先给出参数表格:
参数 | 作用 |
r | read 读模式 |
w | write 写模式 |
a | add 追加模式 |
b | byte 使用二进制模式打开(b可以添加到其他模式中使用) |
+ | 表明读写都是允许的(可以参与到任何模式中) |
为啥有二进制?
使用二进制来读写文件,与使用文本模式不会有很大的差别。但是在使用二进制模式时,Python会原样给出文件中的内容,而文本模式下不一定。
例如要打开音频和图像的时候,就应该在打开模式中加入b,例如“rb”可以用来读取一个二进制文件
1.2 缓冲(buffering)
当传入0或者False时,输入和输出是无缓冲的,也就是指所有的读写操作都是直接针对硬盘
如果传入1或者True,I/O就是有缓冲的,有缓冲是指Python使用内存替代了硬盘,这样程序会更快
如果是大于1的数字,则代表缓冲区的大小(以字节为单位)
如果是-1,则代表是默认的缓冲区大小
二、基本的文件方法
2.1、读和写
如果有一个名为 f 的类文件对象,可以使用 f.write 和 f.read 对文件进行读写。read()函数可以带有参数,作用是告诉流要读取多少字节。下面用一个例子来说明:
>>> f = open(r"G:\text\new.txt","w")
>>> f.write("Hello,")
6
>>> f.write("world!")
6
>>> f.close()
>>> f = open(r"G:\text\new.txt","r")
>>> f.read(5)
'Hello'
>>> f.read()
',world!'
2.2 读写行
函数 | 作用 |
f.readline() | 读取单独的一行(一直读到换行符的出现,同时也读取这个换行符) |
f.readlines() | 读取一个文件中所有行并将其作为列表返回 |
f.writelines() | 传给这个函数一个字符串的列表,或者是可迭代的对象,函数会把所有的字符串写入文件。但是注意程序不会新增行 |
此外注意:没有writeline方法
2.3 关闭文件
通常来说,文件对象会在退出程序之后会自动关闭,但关闭文件可以避免在某些操作系统或者设置中进行无用的修改,也会避免系统中打开了很多的文件消耗大量资源(这是因为Python出于效率的考虑而把数据临时存在某个地方,这些数据可能正处在缓存中,如果程序崩溃了,数据就不会被写入文件)。为了安全起见,要在使用完文件后关闭。
如果为了确保文件关闭,可以使用try/finally语句,举例如下:
try:
#对文件的操作
finally:
file.close()
在Python 2.5之后,引入了一个新的语句,即with语句:
with open("new.txt") as f:
#文件操作
文件在语句结束后会被自动关闭。
文件迭代器
Python可是大名鼎鼎的Python,不来点niubility的操作那还叫Python吗?
Python中,文件对象是可迭代的,意味着可以直接在for循环中使用文件对象,从而进行迭代文件的内容。下面两个demo都是行得通的:
f = open(filename)
for line in f:
#文件操作
f.close()
for line in open(filename):
#文件操作
至此,笔者感觉大部分的Python对文件的操作介绍完了,如果大家看完之后有补充或者修改的意见,请在评论区留言~ 谢谢观看!