文件操作初识

文件操作初识

  1. 文件操作步骤

    • 打开文件
    • 操作文件
    • 关闭文件 f.close()
  2. 打开文件

    f = open("文件路径",mode="文件操作模式",encoding="编码方式")
    

    f 文件句柄

    路径:绝对路径(从磁盘的根处查找)

    ​ 相对路径(相对当前文件进行查找的),建议使用相对路径

    import os
    print(os.getcwd())#查看当前工作路径
    

    可通过源码显示方式填写路径,如下:

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
    

    可减少因路径中“”所造成的错误。

    编码方式:win ——gbk

    ​ linux——utf-8

    ​ mac——utf-8

  3. 文件操作模式

    3.1文本文件

    r 读 读文件,都到哪,光标移动到哪,下次读就从光标位置开始

    f.read() 一次全部读完整个文件,可按字符读取若文件太大会造成内存溢出

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
    print(f.read())
    结果:
    铁憨憨
    血河大帝
    碎小梦
    龙吟
    

    f.read(2) 读取前两个字符

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
    print(f.read(2))
    结果:
    铁憨
    

    f.readline() 读取一行文件

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
    print(f.readline())
    结果:
    铁憨憨
    

    f.readlines() 按行读取,存储到列表中

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
    print(f.readlines())
    结果:
    ['铁憨憨
    ', '血河大帝
    ', '碎小梦
    ', '龙吟']
    

    通过for循环迭代,一行一行读取,防止内存溢出

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="r",encoding="utf-8")
    for i in f:
        print(i)
    结果:
    铁憨憨
    
    血河大帝
    
    碎小梦
    
    龙吟
    

    w 写 清空写

    若文件不存在先创建文件,在执行写操作;若文件存在,会先删除原文件中的内容在执行写操作。

    a 追加写 写在文件末尾

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="a",encoding="utf-8")
    f.write("碎梦都是坑!")
    文本中显示内容:
    铁憨憨
    血河大帝
    碎小梦
    龙吟碎梦都是坑!
    

    r+ 读写 先读后写

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="r+",encoding="utf-8")
    f.read()
    f.write("会呼吸的江湖")
    文件显示内容:
    铁憨憨
    血河大帝
    碎小梦
    龙吟碎梦都是坑!会呼吸的江湖
    

    w+ 写读 先写后读,会先将原文件内容删除,然后写,最终读不到文件。是真的没用。

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="w+",encoding="utf-8")
    f.write("会呼吸的江湖")
    f.read()
    结果:
    无返回
    文件显示内容:
    会呼吸的江湖
    

    a+ 追加写读 直接追加在文件末尾,直接读不出,需通过移动光标来完成读操作

    f = open(r"E:python_workspaceday008顺火暖.txt",mode="a+",encoding="utf-8")
    f.write("会呼吸的江湖")
    f.seek(0)
    print(f.read())
    结果:
    铁憨憨
    血河大帝
    碎小梦
    龙吟碎梦都是坑!会呼吸的江湖
    

    f.tell() 查看光标位置,按字节查看

    f.seek(0,0) 移动光标到文件的开始位置,按字节移动

    f.seek(0,1) 移动光标到光标的当前位置,按字节移动

    f.seek(0,2) 移动光标到文件的末尾位置,按字节移动

    3.2 非文本文件

    rb 读 wb写 ab追加写 不能指定编码

    import requests
    ret = requests.get("http://www.521609.com/uploads/allimg/151124/1-1511241G251317.png")
    f = open("2.jpg",mode="wb")
    f.write(ret.content)
    f.close()
    
  4. 另一种文件打开方式

    with open("文件路径",mode="操作文件的方式",encoding="编码") as f:
    上下文管理
    1.可以自动关闭文件
    2.可以同时打开多个文件

    with open("day8",mode="r",encoding="utf-8") as f,
        open("a",mode="w",encoding="gbk") as f1:
        print(f.read())
        f1.write("真饿!")
    
  5. 文件的修改

    with open("原文件")as f,open("新文件")as f1:
    f.for循环的读取
    f1.for循环的写入

    with open("day8",mode="r+",encoding="utf-8")as f:
        content = f.read()
        content = content.replace("您","你")
        f.seek(0,0)
        f.write(content)
    

    import os
    os.rename("原文件名字",备份名字") # 对原文件进行备份
    os.rename("新文件名字","原文件名字") # 把新文件改成原文件的名字

    with open("day8",mode="r",encoding="utf-8")as f,
    open("new_day8",mode="a",encoding="utf-8")as f1:
        for i in f:
            content = i.replace("你","我")
            f1.write(content)
    import os
    os.remove("day8")  # 原数据可以使用rename来做备份
    os.rename("new_day8","day8")
    
原文地址:https://www.cnblogs.com/yaoqi17/p/11018408.html