文件操作
打开文件的两种方式#
# 方式一
f = open("新建 文本文档.txt", "r", encoding="utf-8")
content = f.read()
print(content)
f.close()
# 方式二
# 用with不需最后.close()
with open("新建 文本文档.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
读文件(3)#
# read()读全部,如上面代码
# readline()读一行
with open("新建 文本文档.txt", "r", encoding="utf-8") as f:
content = f.readline() # 注意:readline()在读的时候会把换行符也读进来,因此会默认换行
print(content, end="")
# 当content不为空时
while content:
content = f.readline()
print(content, end="")
# readlines()返回一个包含每行的列表
with open("新建 文本文档.txt", "r", encoding="utf-8") as f:
content = f.readlines()
print(content) # ['项目经验\n', 'bootstrap + django: 联通day13 + 刷票系统 \n', 'vue + django:\t\t 权限组件 + 供应链 + 车间管理系统\n', 'uniapp: \t\t\t 咸虾米壁纸\n', '\n', '技术栈\n', 'python、django、drf\n', 'bootstrap、vue、element-plus、uni-app\n', 'redis、mysql\n', 'linux\n', 'wireshark']
写文件(4)#
# w会清空之前内容,如果文件不存在会自动创建
# 'w'(文本模式)
with open("新建1.txt", "w", encoding="utf-8") as f:
f.write("我是第一行\n我是第二行\n我是第三行\n") # 注意:write()不会自动换行,如换行需手动加\n
# a是追加,如果文件不存在也会自动创建
with open("新建1.txt", "a", encoding="utf-8") as f:
f.write("我是第一行\n我是第二行\n我是第三行\n")
# r+是读且追加,如果文件不存在也会自动创建
with open("新建1.txt", "r+", encoding="utf-8") as f:
print(f.readline()) # 读取第一行
f.write("我是最后一行")
print(f.readline()) # 打印的是空,我觉得应该是write()与read()共享光标,write()会让光标移动到最后一行,所以为空
# wb(二进制模式)
# 写入的内容是字节(`bytes`对象),如:给文件写入图片
案例-第三行第5个字符处插入"hello word"#
with open("新建文本文档.txt", 'r', encoding='utf-8') as f:
line_list = f.readlines() # 返回列表
# 判断行数是否大于等于3行
if len(line_list) >= 3:
# 判断第三行字符个数是否大于等于5(换行是包含在长度内的)
if len(line_list[2]) >= 5:
line3 = line_list[2]
line_list[2] = line3[:4] + "hello word" + line3[4:] # content[1:4]是左闭右开,content[4:]是左闭右闭,content[:1]是左闭右开
else:
print("不足5个")
else:
print("不足3行")
# 清空该文件,写入line_list
with open("新建文本文档.txt", 'w', encoding='utf-8') as f:
f.writelines(line_list) # writelines()写入一个列表
为啥文件f能循环#
在 Python 中,with open("新建 文本文档.txt", "r", encoding="utf-8") as f:语句打开一个文件并将其赋值给变量f。这里的f实际上是一个可迭代对象。
当对一个文件对象进行迭代时,比如在for i in f:循环中,Python 会逐行读取文件内容。每次迭代,Python 从文件中读取一行内容,并将其作为当前迭代的值赋给变量i,然后继续下一次迭代,直到文件末尾。
这是因为文件对象实现了迭代器协议,它提供了一种方便的方式来逐行处理文件内容,而无需手动跟踪文件指针的位置和读取的行数。
总结来说,f能循环是因为文件对象被设计为可迭代对象,使得可以通过循环方便地逐行读取文件内容。
with open("新建 文本文档.txt", "r", encoding="utf-8") as f:
for i in f:
print(i) # 打印每一行,以字符串形式
作者:cloud-2-jane
出处:https://www.cnblogs.com/cloud-2-jane/articles/18561690
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架