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()

  

posted @   minseo  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示