在Python中,文件操做使用函数open(文件,模式,编码方式)
python
1、文件操做的模式ide
在Python中,操做文件主要有如下四种模式函数
一、r:只读模式ui
f = open("test.txt", "r") data = f.read() print(data)
二、w:只写模式 要注意的是,在用这种模式打开文件的时候,若是文件不存在,会先建立一个文件;若是文件存在,则会先将里面的内容清空。编码
f = open("demo.txt", "w") f.write("Hello Python!!!") f.close()
三、x:只写模式 这种模式跟w模式基本是同样的,只是若是要操做的文件已经存在,则会报错。指针
f = open("demo.txt", "x") f.write("Hello Python!!!") f.close()
如上面的代码所示,在demo.txt文件已经存在的状况下,会出现下面的错误。内存
Traceback (most recent call last):utf-8
File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 7, in <module>it
f = open("demo.txt", "x")ast
FileExistsError: [Errno 17] File exists: 'demo.txt'
四、a:追加模式 这种模式不能进行读的操做,只能在在原来内容的基础上追加内容,若是文件不存在的话,也会先建立文件,而后再进行写操做。
f = open("demo1.txt", "a") print(f.tell()) f.write("Hello Python!!!") f.close()
经过tell()方法能够看出,在文件打开的时候,指针已经移动到了文件的末尾,因此在使用write()写入内容的时候,都会在文件的末尾追加新的内容。
2、二进制方式读写文件
在上面介绍的文件操做中,全都是以文本方式来读写文件,也就是写入的和读出的都是文本,下面介绍以字节(二进制)的方式读写文件
以字节方式读写文件,也就是在原来操做模式的基础上加上字节模式,即:
rb,wb,xb,ab
先介绍一下以普通方式读写文件的流程
f = open("test.txt", "r", encoding="utf-8")
数据在磁盘上以二进制的方式存储,当咱们以r的方式读取文件的时候,Python内部先将文件的二进制数据读取出来,而后以咱们制定的编码方式,将二进制数据转换成文本数据。
在写入的时候也是同样
f = open("demo1.txt", "w", encoding="utf-8") f.write("Hello Python!!!")
咱们传入的都是文本数据,Python先根据编码方式,将文本数据转换成二进制数据,而后存储到磁盘
*可能在平时咱们读写的时候都不会制定编码方式,这是由于Python内部默认的编码方式就是UTF-8
因此当咱们经过字节方式读写文件的时候,Python读取病返回给咱们的就直接是二进制数据,一样,在写入的时候,咱们也应该传给Python字节数据。
字节方式读取文件
f = open("demo.txt", "rb") data = f.read() print(type(data), data) data = str(data, encoding="utf-8") print(type(data), data)
上面代码输出的结果是:
<class 'bytes'> b'Hello Python!!!'
<class 'str'> Hello Python!!!
从打印结果能够看出,直接经过rb方式读取出来的是字节格式的数据,能够经过str()方法将其转换成字符数据。
须要注意的一点是:在以字节方式读取文件的时候,不能加上编码方式,不然将会报错
f = open("demo.txt", "rb", encoding="utf-8") data = f.read() print(type(data), data)
Traceback (most recent call last):
File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 16, in <module>
f = open("demo.txt", "rb", encoding="utf-8")
ValueError: binary mode doesn't take an encoding argument
执行代码将会出现上面的错误,这是由于经过字节方式读取数据的时候,已经不须要Python帮咱们将二进制数据转换成字符数据了。
字节方式写入文件
f = open("demo.txt", "wb") f.write(bytes("Hello World!!!", encoding="utf-8")) f.close()
经过字节方式写入文件的时候,传给Python的必须是字节数据,不然就会报错,以下代码所示
f = open("demo.txt", "wb") f.write("Hello World!!!") f.close()
Traceback (most recent call last):
File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 23, in <module>
f.write("Hello World!!!")
TypeError: a bytes-like object is required, not 'str'
因此在使用字节方式读写文件的时候,应该注意编码方式和输出传入数据的格式。
3、文件操做的相关方法
一、flush()
将暂时保存在内存中的数据写到硬盘上
二、seek()
将指针移动到指定的位置
三、tell()
显示当前指针所在的位置
四、readline()
一次只读取文件中的一行数据
五、truncate()
保留当前指针以前的数据,删除指针所在位置以后的数据