一 初识文件操作
使⽤用python来读写⽂文件是非常简单的操作. 我们使⽤用open()函数来打开⼀一个⽂文件, 获取到⽂文
件句句柄. 然后通过⽂文件句句柄就可以进⾏行行各种各样的操作了了. 根据打开⽅方式的不同能够执⾏行行的操
作也会有相应的差异.
打开⽂文件的⽅方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式
二
读 1. " r "
f=open("e:/课堂练习.txt",mode="r",encoding="GBK")
for line in f:
print(line)
f.close() #关闭
f是一个可迭代对象 f = open("d:/周润发大战奥特曼.txt", mode="r", encoding="utf-8") # 默认跟着操作系统走的 GBK # for line in f: # 内部其实调用的是readline() # print(line) # f.close() # 关闭
写 2." w "
f = open("d:/sylar.txt", mode="w", encoding="utf-8") f.write("周笔畅\n") # 第一次写的时候. 先清空. 再写入. 继续写不会清空了 f.write("胡辣汤") f.write("实付款\n") f.flush() # 必须加 f.close() #最后这个
追加 a
f = open("d:/sylar.txt", mode="a", encoding="utf-8") f.write("娃哈哈") # 追加写 f.write("爽歪歪") f.flush() f.close()
r+ 读写
f = open("菜单", mode="r+", encoding="utf-8") # r+最常见 s = f.read(1) # 读取一个字符 print(s) f.write("胡辣汤") # r+模式. 如果你执行读了操作. 那么写操作的时候. 都是写在文件的末尾. 和光标没有关系 # f.write("ab") # 在文件开头写入. 写入的是字节,把原来的内容盖上 # for line in f: # print(line) # f.write("蛋炒饭") # 正确用法: 先读后写 f.close()
w+ x写读
f = open("菜单", mode="w+", encoding="utf-8") # 很少用. f.write("疙瘩汤") f.seek(0) # 移动到开头 content = f.read() print("读取的内容是", content) f.flush() f.close()
a+ 追加读
f = open("菜单", mode="a+", encoding="utf-8") f.write("韭菜鸡蛋饺子") f.seek(0) content = f.read() # print(content)
三 光标
使用tell()可以知道光标在哪里
# seek()可以移动光标
# 读写的时候. 单位 字符
# 光标: 单位是字节
# 光标移动到末尾: seek(0,2)
seek(偏移量, 位置)
# 位置: 0开头, 1当前位置, 2末尾
# 移动到末尾: seek(0, 2)
2.截断
f = open("我的天呐", mode="r+", encoding="utf-8") f.seek(9) f.truncate(12) # 如果没有参数. 按照光标来截断. 如果有参数. 截断到参数位置 f.flush() f.close()
3.修改文件
mport os # 引入os模块 with open("alex", mode="r", encoding="utf-8") as f1, \ open("alex_副本", mode="w", encoding="utf-8") as f2: for line in f1: new_line = line.replace("good", "sb") f2.write(new_line) os.remove("alex") os.rename("alex_副本", "alex")
4.日志处理
result = [] with open("2018-09-12.log", mode="r", encoding="utf-8") as f: hang = f.readline() title = hang.split("|") for line in f: line = line.strip() # 去掉空白, 2018-09-11 00:00:01|刘伟|吃鸡 lst = line.split("|") dic = {title[0]: lst[0], title[1]: lst[1], title[2]: lst[2]} result.append(dic) print(result)
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· 对象命名为何需要避免'-er'和'-or'后缀
· JDK 24 发布,新特性解读!
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· SQL Server如何跟踪自动统计信息更新?