Python文件操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python文件操作相关的知识,希望对你有一定的参考价值。

在Python中,文件操作使用函数open(文件,模式,编码方式)


一、文件操作的模式

在Python中,操作文件主要有以下四种模式

1、r:只读模式

f = open("test.txt", "r")
data = f.read()
print(data)


2、w:只写模式   要注意的是,在用这种模式打开文件的时候,如果文件不存在,会先创建一个文件;如果文件存在,则会先将里面的内容清空。

f = open("demo.txt", "w")
f.write("Hello Python!!!")
f.close()


3、x:只写模式  这种模式跟w模式基本是一样的,只是如果要操作的文件已经存在,则会报错。

f = open("demo.txt", "x")
f.write("Hello Python!!!")
f.close()

如上面的代码所示,在demo.txt文件已经存在的情况下,会出现下面的错误。

Traceback (most recent call last):

  File "/Users/ssspure/PycharmProjects/File/BaseFile/FileMode.py", line 7, in <module>

    f = open("demo.txt", "x")

FileExistsError: [Errno 17] File exists: ‘demo.txt‘


4、a:追加模式  这种模式不能进行读的操作,只能在在原来内容的基础上追加内容,如果文件不存在的话,也会先创建文件,然后再进行写操作。

f = open("demo1.txt", "a")
print(f.tell())
f.write("Hello Python!!!")
f.close()

通过tell()方法可以看出,在文件打开的时候,指针已经移动到了文件的末尾,所以在使用write()写入内容的时候,都会在文件的末尾追加新的内容。


二、二进制方式读写文件

在上面介绍的文件操作中,全都是以文本方式来读写文件,也就是写入的和读出的都是文本,下面介绍以字节(二进制)的方式读写文件

以字节方式读写文件,也就是在原来操作模式的基础上加上字节模式,即:

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‘


所以在使用字节方式读写文件的时候,应该注意编码方式和输出传入数据的格式。


本文出自 “ssspure” 博客,请务必保留此出处http://ssspure.blog.51cto.com/8624394/1894359

以上是关于Python文件操作的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

常用python日期日志获取内容循环的代码片段

VSCode自定义代码片段——git命令操作一个完整流程

使用 Python 代码片段编写 LaTeX 文档

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程