Python文件IO操作
十五,pytho文件IO操作
python文件操作的步骤
1,先open打开一个要操作的文件
2,操作此文件(读,写,追加)
3,close关闭此文件
python主要访问模式
只读模式(r)
创建一个测试用文件
1 | cat / etc / passwd |head - 5 > / tmp / 1.txt |
只读模式示例
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 只读模式示例 f = open ( "/tmp/1.txt" , mode = "r" ) # 默认为读模式 data1 = f.read() # 读第一遍 data2 = f.read() # 读第二遍 print (data1) # 打印读取第一遍的输出即文件所有内容 print ( "=" * 50 ) print (data2) # 第二次读取没有内容 f.seek( 10 ) # 移动光标指针位置至位置10 一个字符占用一个位置 print (f.tell()) # 打印指针位置 print (f.readline()) data2 = f.read() print (data2) f.close() |
小结
r模式是打开文件,默认光标在第1位,即seek(0)
read()读取当前光标至文件最后
readline()读取当前光标至当前行最后
readlines()类似read(),但是读取的内容按行转换成列表,列表元素包含换行符\n
只写模式示例
1 2 3 4 5 6 7 8 9 | [root@node1 python] # cat 只写模式.py f = open ( "/tmp/1.txt" , "w" ) # 只写模式,文件不存在则创建文件,如果文件存在则会覆盖原内容 # data=f.read() # 读取会报错 f.close() f = open ( "/tmp/2.txt" , "w" ) f.write( "hello\n" ) f.write( "world\n" ) |
只写模式示例 创建新文件并写入内容
下面打开一个终端操作
1 2 3 4 5 6 7 8 9 | >>>f = open ( "/tmp/2.txt" , "w" ) # 如果有文件则清空文件内容,如果文件不存在则创建文件 >>> f.write( "hello\n" ) # 往文件写入内容加回车,默认不加回车 6 # 返回写了多少给字符,这时候文件内容还是为空除非是flush或者close >>> >>>f.truncate() # 截断,括号里没有数字,那么就是不删除 >>>f.truncate( 3 ) # 截断,数字为3,就是保留前3个字节 >>>f.truncate( 0 ) # 截断,数字为0,就是全删除 >>>f.flush() #刷新把内存睡觉写入到硬盘 >>>f.close() #关闭 |
追加模式
1 2 3 4 5 | >>>f = open ( "/tmp/2.txt" , 'a' ) # 类似shell里的>>符 >>>f.write( "hello\n" ) # 在文件尾部追加 >>>f.flush() >>>f.truncate( 0 ) # 追加模式可以是否truncate方法清空文件 >>>f.close() |
注意
1 2 3 | 扩展: 1 ,但python里的a模式,是可以使用truncate方法来清空内容的 2 ,在linux系统里执行了下面命令后,则就只能追加此文件,而不能清空此文件内容 # chattr +a /tmp/2.txt 3 ,如果在linux系统里做了chattr + a / tmp / 2.txt 后,在python里再用w或a模式 open 此文件,就不可以使用truncate方法来清空内容了(因为python允许你这么做,但linux系统拒绝了) |
文件读的循环方法
1 2 3 4 5 6 7 8 9 10 11 12 13 | f = open ( "/tmp/1.txt" , "r" ) # 循环方法一 for index, line in enumerate (f.readlines()): print (index, line.strip()) f.close() # 循环方法二:执行效率高,相当于一行一行的读,而不是一次性读取完 # 如果文件太大使用方法一循环速度会很慢 f = open ( "/tmp/1.txt" , "r" ) for index, line in enumerate (f): print (index, line.strip()) f.close() ~ |
比较r+,w+,a+三种模式
1 2 3 | r + 不会改变原文件的数据,相当于在只读模式的基础上加了写权限; w + 会清空原文件的数据,相当于在只写模式的基础上加了读权限; a + 不会改变原文件的数据,相当于在只追加模式的基础上加了读权限 |
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | f = open ( "/tmp/2.txt" , "w+" ) f.write( "11111\n" ) f.write( "22222\n" ) f.write( "33333\n" ) print (f.tell()) # 打印结果为18,表示光标在最后 f.write( "aaa" ) # 在文件后追加aaa字符 print (f.tell()) f.seek( 0 ) # 把光标移动到0也就是第一个字符 f.write( "bbb" ) # f.seek(0)之后再写bbb,就是把第一行的前3个字符替换成bbb 第一行变成了bbb11 f.seek( 0 ) # 把光标再次移动到0 f.readline() # 读取一行,读光标移动到第一行最后 f.seek((f.tell())) # f.seek到第一行最后 如果理解为两个光标的话,可以看作是把写光标同步到读光标位 f.write( "ccc" ) # 这样写ccc,会把第二行的前3个字符替换成ccc f.close() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!