文件操作
打开文件的两种方式
# 方式一
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) # 打印每一行,以字符串形式

浙公网安备 33010602011771号