文件操作
文件模式
当你想对文件进行操作的时候,必须进入相应的文件模式中
模式名称 | 描述 |
---|---|
r | 以读方式打开文件.文件的指针将会放在文件的开头。这是默认模式 |
r+(常用) | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖(一旦进入此模式,即清空文件)。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于写读。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于追加读。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
打开,关闭文件
函数:文件 = open(文件路径,文件模式,encoding=字符编码)
,打开并接收文件
既然打开文件,就必须关闭文件
函数:文件.close()
,关闭文件
读取文件
必须进入有可读的模式
每当读取完成后,光标就跳到你读取字节的最后;当你下面又开始读取的时候,在光标的位置开始读取,而不是在文件的开头.如果想在开头读取,必须调整光标.
读取指定的字节
函数:文件.read(读取的字节数量)
,
默认读取全部文件数据,可以指定从文件读取的字节数量
一个汉字代表一个字节
一个英文代表一个字节
一个换行符代表一个字节
读取文件的一整行
函数:文件.readline()
读取文件的多行
函数:文件.readlines()
读取全部,并且以列表的形式返回每一行.读取的文件会全部储存到内存中.所以一般不适合用到大文件里
例如:
f = open("文件,春晓", "r", encoding="utf8")
print(f.readlines())
f.close()
>>>['春晓\n', '唐代:孟浩然\n', '春眠不觉晓,处处闻啼鸟。\n', '夜来风雨声,花落知多少。']
直接遍历文件
使用for循环遍历文件,例如:for i in 文件:
这是python内部将文件做成了一个迭代器,用一点,取一点
写入文件
1.必须进入有可写的模式
2.在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
3.当想对文件进行换行操作时,必须输入换行符
4.光标在哪,文件写在哪
写入字符串
函数:文件.write(写入的字符串)
# 数值会返回你输入的字节长度
当不想清空文件数据,在文件最后追加数据时,需进入追加模式,“a”在这里插入代码片
修改文件
因为电脑的内存机制,所以不能直接进行文件修改.可以另辟蹊跷.
方法:复制一个新的文件,把数据一行一行遍历储存进去,在要改的那一行进行操作
例如:
此方法也可以进行添加,修改,删除文件的数据
f_read = open("文件,春晓", "r", encoding="utf8") #打开要修改的文件,以便进行遍历
f_write = open("文件,春晓2", "w", encoding="utf8") #新建一个文件,遍历一行数据时,储存进去
number = 1 #创建标志位
for line in f_read: #进行遍历
if number == 4: #判断是否在修改的那一行
f_write.write("Hello Woeld\n") #修改文件
else: #不在修改的那一行,直接把数据加到另一个文件中
f_write.write(line)
number += 1
删除文件
截断文件
作用:清空光标后面的所有的数据
函数:f.truncate()
其他文件方法
检测光标位置
函数:文件.tell()
在UTF-8中:一个英文走一个光标,一个中文走三个光标.
调整光标位置
函数:seek(调整的光标位置)
把缓冲区数据立刻加到文件中
函数:文件.flush()
检测文件是否连接设备
作用:检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。
函数:文件.isatty()
with语句
可以同时管理多个文件对象,并且不用退出文件,语句自动退出
语法结构:with open("文件","模式") as 文件变量名, open("文件名","模式") as 文件变量名