python基础文件操作
发布于 2021-04-17 05:39 ,所属分类:知识学习综合资讯
目录
初识文件操作
文件操作的读
文件操作的写
文件操作的追加
文件操作的相应功能
打开文件的另一种方式
文件操作的改
文件操作
初识文件操作

(点击查看大图)
用python操作文件,需要的参数:
文件路径:path
打开方式:读,写,追加,读写,写读
编码方式:utf-8,gbk,gb2312.... (文件其实就是数据的存储,需要知道这个数据是以什么编码存储的)
f = open(r'F:\test.txt', mode='r', encoding='utf-8')content = f.read()print(content)f.close()
(左右滑动查看完整代码)
代码解释:
f:就是一个变量,一般都会写成f,f_obj,file,f_handler,fh,等,被称作文件句柄,对文件进行的任何操作,都要通过 文件句柄. 的方式。
open:是python的内置函数,底层调用的是操作系统(windows,linux等)的接口。
r'F:\test.txt':文件的路径。路径里面的\与后面的字符会发生转义,需要在路径中的\前面再加一个\,或者在路径的整体前面加一个r。
mode:打开文件的方式,r为只读模式。
encoding:此次打开文件使用什么编码。一般文件用什么编码保存的,就用什么编码方法打开。可以不写,不写默认的是操作系统默认的编码。
f.read():通过文件句柄对文件进行相应的操作。
f.close():关闭文件句柄(可以把文件句柄理解成一个空间,这个空间存在内存中,必须要主动关闭)。
操作文件的流程
打开文件
通过文件句柄对文件进行相应的操作
关闭文件

(点击查看大图)
文件操作的读
r 只读模式
以只读方式打开文件,文件的指针会放在文件的开头。不设置mode,默认使用的是 r 模式操作文件。
f = open(r'F:\test.txt', mode='r', encoding='utf-8')content = f.read()print(content)f.close()
(左右滑动查看完整代码)
rb 二进制只读模式
以二进制格式打开一个文件用于只读。文件指针会放在文件的开头。
带b的都是以二进制的格式操作文件,主要是操作非文字文件:图片,音频,视频等,并且如果用带有b的模式操作文件,就不用声明编码方式。
f = open(r'F:\test.png', mode='rb')content = f.read()print(content)f.close()
(左右滑动查看完整代码)
r+ 读写模式
+ 就是加一个功能。r 模式是只读模式,在这种模式下,文件句柄只能进行read读的操作,而不能进行write写的操作。所以想让这个文件句柄既可以进行读的操作,又可以进行写的操作,可以使用 r+ 读写模式。
r+ 模式是打开一个文件用于读写(读并追加)。文件指针默认会放在文件的开头。
f = open(r'F:\test.txt', mode='r+')content = f.read() # 先读print(content)f.write('新加的内容') # 后写f.close()
(左右滑动查看完整代码)
注意:如果在读写模式下,先写后读,那么文件就会出问题。因为默认光标是在文件的最开始,要是先写,则写入的内容会将原内容覆盖掉,直到覆盖到写完的内容,然后在后面开始读取。
'''错误示范:先写后读:写的内容会覆盖对应字节的原内容'''f = open(r'F:\test.txt', mode='r+')f.write('新加的内容') # 先写content = f.read() # 后读print(content)f.close()
(左右滑动查看完整代码)
文件操作的写
w 只写模式
如果文件存在,先清空原文件内容,然后写入新内容。
如果文件不存在,先创建文件,然后写入内容。
f = open(r'F:\test.txt', mode='w', encoding='utf-8')f.write('写入内容')f.close()
(左右滑动查看完整代码)
wb 二进制只写模式
以二进制格式打开一个文件只用于写入。一般用于非文本文件如:图片,音频,视频等。
如果文件存在,先清空原文件内容,然后写入新内容。
如果文件不存在,先创建文件,然后写入内容。
'''先以rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样就完成了类似于图片复制的流程'''f = open(r'F:\1.png', mode='rb')content = f.read()f.close()f = open(r'F:\2.png', mode='wb')f.write(content)f.close()
(左右滑动查看完整代码)
文件操作的追加
a 只追加写模式
打开一个文件用于追加。
如果文件存在,文件指针会放在文件的结尾,新的内容将会被写入到已有内容之后。
如果文件不存在,先创建文件,然后写入内容。
f = open(r'F:\test.txt', mode='a', encoding='utf-8')f.write('追加的内容')f.close()
(左右滑动查看完整代码)
文件操作的相应功能

(点击查看大图)
读
'''read()将文件中的内容全部读取出来如果文件很大会非常占内存'''f = open(r'F:\test.txt', mode='r', encoding='utf-8')content = f.read()print(content)f.close()
(左右滑动查看完整代码)
'''read(n)读取的时候指定读取到什么位置文件打开方式为文本模式时,代表读取n个字符文件打开方式为b模式时,代表读取n个字节'''f = open(r'F:\test.txt', mode='r', encoding='utf-8')content = f.read(3) # 读取3个字符print(content)f.close()
(左右滑动查看完整代码)
'''readline()每次只读取一行注:readline()读取出来的数据在后面都有一个\n解决方式:在读取出来的文件后边加一个strip()'''f = open(r'F:\test.txt', mode='r', encoding='utf-8')print(f.readline())print(f.readline().strip())f.close()
(左右滑动查看完整代码)
'''readlines()返回一个列表,列表里面每个元素是原文件的每一行如果文件很大会非常占内存'''f = open(r'F:\test.txt', mode='r', encoding='utf-8')print(f.readlines())f.close()
(左右滑动查看完整代码)
'''for循环文件句柄是一个迭代器特点:每次循环只在内存中占一行的数据,非常节省内存'''f = open(r'F:\test.txt', mode='r', encoding='utf-8')for line in f:print(line) # 一行行的打印f.close()
(左右滑动查看完整代码)
写
'''write()在文件中写入内容'''f = open(r'F:\test.txt', mode='w', encoding='utf-8')f.write('写入内容')f.close()
(左右滑动查看完整代码)
光标
'''tell()获取当前光标的位置单位是字节byte'''f = open(r'F:\test.txt', mode='r', encoding='utf-8')print(f.tell()) # 0content = f.read()f.close()
(左右滑动查看完整代码)
'''seek(n)光标移动到n位置移动单位是字节byte,如果是utf-8的中文部分要是3的倍数移动到开头:seek(0)移动到结尾:seek(0,2)seek的第二个参数表示的是从哪个位置进行偏移默认是0,表示开头;1表示当前位置;2表示结尾'''f = open(r'F:\test.txt', mode='r+', encoding='utf-8')f.seek(0) # 将光标移动到开头content = f.read() # 读取内容, 此时光标移动到结尾print(content)f.seek(0) # 再次将光标移动到开头f.seek(0, 2) # 将光标移动到结尾content2 = f.read() # 读取内容. 什么都没有print(content2)f.seek(0) # 将光标移动到开头f.write("写入内容") # 写入信息. 此时光标在12,中文3 * 4个 = 12f.close()
(左右滑动查看完整代码)
其他
'''flush()刷新文件内部缓冲区强制保存'''f = open(r'F:\test.txt', mode='w', encoding='utf-8')f.write('写入内容')f.flush() # 强制保存f.close()
(左右滑动查看完整代码)
'''readable() 判断是否可读writeable() 判断是否可写'''f = open(r'F:\test.txt', mode='r', encoding='utf-8')print(f.readable()) # Trueprint(f.writable()) # Falsecontent = f.read()f.close()
(左右滑动查看完整代码)
打开文件的另一种方式

(点击查看大图)
with上下文管理
'''利用with上下文管理,会自动关闭文件句柄,不用手动关闭'''with open(r'F:\test.txt', mode='r', encoding='utf-8') as f:content = f.read()print(content)
(左右滑动查看完整代码)
'''一个with语句可以操作多个文件,产生多个文件句柄'''with open(r'F:\test1.txt', mode='r', encoding='utf-8') as f1, \open(r'F:\test2.txt', mode='w', encoding='utf-8') as f2:content = f1.read()f2.write(content)
(左右滑动查看完整代码)
文件操作的改

(点击查看大图)
文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说。平时看到的修改文件,都是模拟出来的效果。
修改文件的步骤:
以读的模式打开原文件
以写的模式创建一个新文件
将原文件的内容读出来,修改成新内容,写入新文件
将原文件删除
将新文件重命名成原文件
'''将硬盘存放的文件内容全部读入内存,修改后一次性写入新文件'''import os # 调用系统模块with open(r'F:\test.txt', encoding='utf-8') as read_f, \open(r'F:\test2.txt', 'w', encoding='utf-8') as write_f:data = read_f.read() # 全部读入内存,如果文件很大,会很卡data = data.replace('abc', 'ABC') # 在内存中完成修改write_f.write(data) # 一次性写入新文件os.remove(r'F:\test.txt') # 删除原文件os.rename(r'F:\test2.txt', r'F:\test.txt') # 将新建的文件重命名为原文件
(左右滑动查看完整代码)
'''将硬盘存放的文件内容一行一行地读入内存,修改后一行一行地写入新文件'''import os # 调用系统模块with open(r'F:\test.txt', encoding='utf-8') as read_f, \open(r'F:\test2.txt', 'w', encoding='utf-8') as write_f:for line in read_f: # 一行一行地读入内存line = line.replace('abc', 'ABC') # 在内存中完成修改write_f.write(line) # 一行一行地写入新文件os.remove(r'F:\test.txt') # 删除原文件os.rename(r'F:\test2.txt', r'F:\test.txt') # 将新建的文件重命名为原文件
(左右滑动查看完整代码)


![[Python] 码哥----python从入门到精通(全60集)等300多个文件](https://static.kouhao8.com/sucaidashi/xkbb/7ae6c7e3e4fe91fc43ad7a9f3c1f08a3.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)



![[Linux] 马老师 “计算机基础”视频 Linux系统基础视频 Linux文件和命令基础学习视频](https://static.kouhao8.com/sucaidashi/xkbb/723b6808edb31c41eadec17aae7f23bf.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
![[Linux] 马老师 “计算机基础”视频 Linux系统基础视频 Linux文件和命令基础学习视频](https://static.kouhao8.com/sucaidashi/xkbb/6f99dd5a2cb1cc9c6a53fad0bb116eba.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)






![[项目实战] php文件上传与下载重基础到实战视频教程](https://static.kouhao8.com/sucaidashi/xkbb/6328f20ad68bb340175842b0f6726415.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
![[项目实战] php文件上传与下载重基础到实战视频教程](https://static.kouhao8.com/sucaidashi/xkbb/84ec2a5cad68dfc01f2e6a49e5abfe50.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)







![[Python基础] 小甲鱼零基础入门Python学习视频+全套源码课件 Python视频教程 96讲](https://static.kouhao8.com/sucaidashi/xkbb/d7970e7abb546e6cbe9a4c45b030ed51.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[Linux] 112集 云计算专题视频 兄弟连新版Linux视频教程 系统基础 文件系统 用户权限 Shell](https://static.kouhao8.com/sucaidashi/xkbb/5824e3344932c60a6cce6f644a233ab2.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[Python基础] Python Web开发基础入门视频教程 目前最适合Python入门的视频教程 系统学习Python](https://static.kouhao8.com/sucaidashi/xkbb/c5d2bb19e1f9dd55f599179051f766e3.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
![[Python基础] Python零基础入门学习视频教程全42集](https://static.kouhao8.com/sucaidashi/xkbb/78b9d826631a1cf627f1eff51b54368b.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
相关资源