文章目录
-
前言
-
一、打开和关闭文件(open和close)
-
1.打开文件
-
2.关闭文件
-
mode的方式
-
几种读取文件的函数
-
写入文件的函数
-
-
二、with…open…as操作文件
-
1、with…open…as与open......close的区别
-
-
总结
前言
本篇文章讲解,平时读写文件的基本用法
一、打开和关闭文件(open和close)
语法:
open(file, mode, encoding=None)
讲解字段含义:
file:文件(其实是一个具体文件的路径)
例如:
在D盘我创建了一个名为:qhj.txt的文件,那么file就应该是:D:\study\qhj.txt
mode:打开文件的方式(以什么样的方式打开这个文件)
encoding:编码(以什么样的方式来编码)
1.打开文件
字段讲解:
r"D:\study\qhj.txt" :也就是file
"r" :也就是mode
encoding="utf-8" :也就是encoding=None,只不过这个传了具体值"utf-8",所以不再是默认的None
注意:其实上面这种方式是一种省略的方式写法,可能对于初学者有点疑惑,为什么r"D:\study\qhj.txt"的前面,"r"的前面没有一个参数,而"utf-8"前面就有encoding呢?
其实我们还原最基本的(标准的)写法就明白了。
2.关闭文件
语法:file.close() #注意
:这里的file是一个对象,使用对象调出函数,来操作关闭。
举例:
mode的方式:
以读为主 | r | 以只读方式打开文件。指针将会放在文件的开头(这是默认模式);read 只能读不能写,文件不存在的时候会报错 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 | |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。读写模式 文件不存在的时候会报错 可读可写,但是写的有问题(在最前方写,因为指针在0处) | |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 | |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。(也就是写入的内容把原有的内容的覆盖了);write 文件不存在的话,给创建,不能读,写之前会清空原来的文件内容 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 | |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件;写读模式 文件不存在的时候给创建 清空文件内容,然后在写 | |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 | |
以追加为主 | a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。追加模式 不会清空原来的内容 追加写,但是不能读 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 | |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。追加模式 文件不存在的时候给创建 可读可写 ,追加写,但是读不到内容(因为指针在末尾,所以读不到) | |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
注意:这些字母可能有些不好记,那么可以还原成英语单词来记忆:
r 的单词意思是:read
w 的单词意思是:write
a 的单词意思是:append
b 的单词意思是:binary(二进制)
几种读取文章的函数:
readlines() :读取所有行,以列表的形式返回读取内容,列表的每一个元素对应文件的一行
readline():按行读取文件的内容,换行符号 ‘\n’
read([size]):默认读取全部文件内容,如果有size参数,则读取前size个字节数
举例:
(1)读取文件的全部数据
(2)只读取单行的数据
(3)如果我们要读取几行数据,那么就要多调几次readline()函数
(4)按照每一行读取(默认放入列表中)
(5)读取前4个字符
写入文件的函数:
write("写入文件的内容")
(1)j.txt为新建的空文件
(2)j.txt不为空文件时。(这个时候的写入就要把里面的原来有的数据覆盖----相当于清空之前的数据)
(3)以追加的方式写入。
当原来的文件里面没有数据的时候(相当于一般的写入):
当原来的文件里面有数据的时候(追加的写入):
二、with…open…as操作文件
1、with…open…as与open......close的区别:
1)open......close 这种结构,在打开文件后,经过数据的一系列操作后,需要调函数close()来关闭文件
2)with…open…as 不需要调close()函数来关闭文件
语法:
with open(file,mode,encoding) as file:
这里面是要操作的东西
另外一个区别:
open......close:这是因为文件操作是一个I/O操作,当我们写文件时,操作系统往往不会立即把数据写入到磁盘,而是先放到内存缓存起来,等空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘同时释放资源。如果不这样做的话,可能造成数据丢失和资源浪费。
我们知道代码的执行是从上到下按行执行,但是如果open以下close之上的代码某一行出错了呢,那是不是不能执行close()这个函数了。为了防止这个问题发生,所以就有了with…open…as。不管中间的代码是否有错,最后都会关闭文件。
举例:
可以参考一位优秀的博主文章:
python中的文件读写操作open和with的用法 - 码农教程
python之文件操作(open与with...open...as)_搬砖,赞路费的博客-CSDN博客
总结
以上就是今天要讲的内容,本文仅仅简单介绍了open...close和with....open....as的基本使用和区别。