使用python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开方式的不同能够执行的操作也会有相应的差异。
打开文件的方式有:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b默认使用的是r(只读)模式。
一、只读操作(r,rb)
1 2 3 4 | f = open ( 'a.txt' , mode = 'r' , encoding = 'utf-8' ) content = f.read() print (content) f.close() |
encoding表示编码集,根据文件的实际保存编码进行获取数据,我们经常使用的是utf-8编码格式。
rb读取的数据是bytes类型,在rb模式下,不能选择encoding字符集。rb通常用于读取非文本文件,比如读取MP3、图像、视频等数据。
绝对路径和相对路径:
1.绝对路径:从磁盘根目录开始一直到文件名。
2.相对路径:同一个文件夹下的文件,相对于当前这个程序所在的文件夹而言,如果在同一个文件夹中,则相对路径就是这个文件名,如果在上一层文件夹中,则要../
读取文件的方法:
1.read()将文件中的内容全部读取出来,弊端:占内存,如果文件过大,容易导致内存崩溃。read(n)可读取n个字符,但如果再次读取,则会在当前位置继续去读而不是从头读,如果使用的是rb模式,则读取出来的是n个字节。
2.readline()一次读取一行数据,PS:readline()结尾,每次读取出来的数据都会有一个\n,可是使用strip()方法来去掉\n或者空格。
3.readlines()将文件中每一行数据形成一个元素,放到一个列表中,将所有的内容都读取出来,所以也容易出现内存崩溃的问题。
4.循环读取,每次读取一行内容,不会产生内存溢出的问题。
1 2 3 4 | f = open ( 'a.txt' , mode = 'r' , encoding = 'utf-8' ) for line in f: print (line.strip()) f.close() |
二、写模式(w,wb)
在用写模式时,如果没有文件,则会创建文件,如果文件存在,则会将原文件中的内容删除,再写入新内容。
1 2 3 4 | f = open ( 'a.txt' , mode = 'w' , encoding = 'utf-8' ) f.write( '腾讯' ) f.flush() f.close() |
wb模式下,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转化成utf-8的bytes数据。
三、追加(a,ab)
追加模式下,写入的内容会追加在文件的结尾。
1 2 3 4 | f = open ( 'a.txt' , mode = 'a' , encoding = 'utf-8' ) f.write( '网易' ) f.flush() f.close() |
ab模式追加bytes数据。
四、读写模式(r+,r+b)
对于读写模式,必须先读,默认光标是在开头的,在读写模式下,不管光标在哪,写入都是从末尾写入。
1 2 3 4 5 | f = open ( 'a.txt' , mode = 'r+' , encoding = 'utf-8' ) content = f.read() f.write( '世纪天成' ) f.flush() f.close() |
五、写读(w+,w+b).
写读模式先将所有的内容清空,然后写入,最后读取,但读取的内容是空的,不常用。
六、追加读(a+)
a+模式下,不论先读还是后读,都是读取不到数据的。
七、其他常用文件操作
1.seek(n)光标移动到n位置,移动的单位是byte,所以如果是utf-8的中文部分要是3的倍数。
移动到开头:seek(0)
移动到结尾:seek(0, 2) seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,1表示当前位置,2表示结尾。
2.tell()使用tell()可以帮我们获取到当前光标在什么位置。
3.truncate()截断文件
截断操作前要先移动光标,移动到想要截断的位置,然后再进行截断,truncate(n)如果给出了n,则从开头进行截断,否则从当前位置截断,后面的内容将会被删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术