Loading

文件操作

打开文件的两种方式

# 方式一
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)  # 打印每一行,以字符串形式
posted @ 2024-11-21 22:27  一只大学生  阅读(19)  评论(0)    收藏  举报