• day08文件操作


    今日内容

    • 文件操作

    内容详细

    1.打开文件

    1.open("作业讲解.py",mode="r",encoding="utf-8")

    2.文件打开模式

    • r/w/a(只读只写字符串)

    • r+/w+/a+(可读可写)

    • rb/wb/ab(只读只写二进制)

      • 字符串转换成"二进制"

        v="你好"

        data=v.encode("utf-8")

      • 二进制转换成字符串

        v=""

        data=data.decode("utf-8")

    • r+b/w+b/a+b(可读可写二进制)

    1.mode=r:

    以只读方式打开文件 / 不能写 / 如果文件不存在 则报错

    #打开文件
    file_object=open("作业讲解.py",mode="r",encoding="utf-8")
    #读文件
     content=file_object.read()
     print(content)
    #关闭文件
    file_object.close()
    
    # mode=r只能读 不能写
    file_object.write("dhhd")#文件中写入内容
    file_object.close()#关闭文件  将内存中内容保存到存储地
    #io.UnsupportedOperation: not writable
    
    2.w:

    以只能写方式 打开文件 /不能读 / 写之前内容先被清空 / 文件不存在时候会新建文件

    #在写之前先清空文件,一般用于新建文件
    #打开文件
    file_object=open("file_test.txt",mode="w",encoding="utf-8")
    #写内容
    file_object.write("测试")
    file_object.close()
    #"测试"
    
    #mode=w 不能读
    file_object=open("file_test.txt",mode="w",encoding="utf-8")
    
    file_object.write("测试")
    content=file_object.read()
    print(content)
    file_object.close()
    #io.UnsupportedOperation: not writable
    
    3.a:

    以只能追加方式打开文件 / 文件不存在则新建文件 / 光标永远在内容最后位置

    #写入:a,只追加不能读 + 不存在则新建 
    file_object=open("file_test.txt",mode="a",encoding="utf-8")
    file_object.write("你好")
    file_object.close()
    #测试你好 
    
    
    4.r+:

    以可读可写方式打开文件

    • 读:默认光标从0开始读,也可以通过seek调整光标位置,读物完后会改变光标 位置,所以在写之前需要确定光标位置

    • 写:从光标所在的位置开始写,也可以通过seek调整光标位置, 容易覆盖已存在的内容

    • Seek(2): 在写之前改变光标位置 从第二个字节开始

      #文件已经存在的文件内容::"今天要好好学习哦"
      file_object=open("file_test.txt",mode="r+",encoding="utf-8")
      
      content=file_object.read()#读取后光标移动到文件最后一个位置
      file_object.seek(3)#改变光标位置  从第三个字节后开始写入
      file_object.write("你好")#第三个字节后的两个字符,(天要)将会被覆盖
                              #今你好好好学习哦
      
      file_object.close()
      
      
      
    6.w+:
    • 写入时候文件内容先被清空,所以读取时需要调整光标

      file_object=open("file_test.txt",mode="w+",encoding="utf-8")
      
      #在写入之前文件内容就被清空
      content=file_object.read()
      print(content)#打印空
      
      file_object.write("aaaa")
      file_object.seek(0)#在读取之前需要调整光标位置 不然读取不到值
      content1=file_object.read()
      print(content1)
      
      file_object.close()
      
      
      
    6.a+ :

    在之前文件内容上进行追加,打开文件光标就在内容的最后位置

    ​ 所以读取的时候需要调整光标

    file_object=open("file_test.txt",mode="a+",encoding="utf-8")
    
    #在之前文件内容上进行追加,打开文件光标就在内容的最后位置
    # 所以读取的时候需要调整光标
    file_object.seek(0)
    content=file_object.read()#
    print(content)#打印空
    
    # file_object.write("aaaa")
    
    # file_object.seek(0)#在读取之前需要调整光标位置
    # content1=file_object.read()
    # print(content1)
    
    file_object.close()
    
    
    
    7.rb/wb/ab
    • 字符串转换成"二进制"encode

      v="你好"

      data=v.encode("utf-8")

    • 二进制转换成字符串decode

      v="xe6"

      data=data.decode("utf-8")

      #示例1 w
      f=open("a.txt",mode="w",encoding="utf-8")
      f.write("你好")#传入字符串
      #将“你好” 根据encoding指定的编码转换成二进制:
      #"你好" -->10001010 10001010 10001010 10001010 10001010 10001010
      #将二进制写入到文件中
      f.close()
      
      
      #示例二 wb一般用于图片/音频/视频/未知编码
      f=open("a.txt",mode="wb")#
      #1.wb:把要写入的字符串以二进制方式写入
      data="我好困"
      con=data.encode("utf-8")
      #将写入的字符串按照的utf-8编码转换成二进制
      f.write(con)
      #将二进制内容写入文件
      f.close()
      
      #示例三rb
      f=open("a.txt",mode="rb")#
      #直接读取的是二进制数据
      data=f.read()
      data=f.read(1)#表示一个字节
      f.close()
      print(data)#打印十六进制
      new_data=data.decode("utf-8")#二进制转换成字符串
      print(new_data)
      
      
      
      
    7.r+b/w+b/a+b(可读可写二进制)

    2.操作

    1.读取:

    • read() :从文件当前位置(光标) 开始读取整个文件

    • readline():每次读取一行内容,读取时占用内存较小,适合大文件读取

    • readlines():读取文件所有行(包括换行符,特殊字符会被转义后存储)存放在一个列表中,每行作为一个元素

    • read(2):读取两个字符,当读取模式以rb 时候 表示两个字节

    • 
      #1.去除空格
      
      file_object=open("file_test.txt",mode="r",encoding="utf-8")
      for line in file_object:
            line=line.strip()
            #去除内容中每一行的换行,不然会读取文本的换行符 并打印到屏幕
           print(line)
      # aaaa
      # hfh
      # jdjf
      # jdjjd
      
      
      
      #2.read 读取全部文件
      
       data=file_object.read()
       print(data)
       print(type(data))
      #aaaa
      #hfh
      #jdjf
      #jdjjd
      #<class 'str'>
      
      #3.readline()读取一行
      
      data=file_object.readline()
      print(type(data))#<class 'str'>
      while data:#while循环读取  并记录光标位置 直至读完为止
          print(data.strip())
          data=file_object.readline()
      file_object.close()
      #你好 fh
      #jdjf
      #jdjjd
      
      
      
      #4.readlines()读取所以行 
      
      ata=file_object.readlines()#读取所以行 包括换行符
      print(type(data))# <class 'list'>
      print(data)# ['你\\\n好 fh
      ', 'jdjf
      ', 'jdjjd
      ']#特殊字符被转义
      for line in data:
          print(line)
      # 你\
      好 fh  #print("
      ")被打印执行
      # 
      # jdjf
      # 
      # jdjjd
      
      

    2.write()

    4.seek():调整光标位置

    5.tell():获取当前光标的位置

    6.flush():强制将内存的内容刷到硬盘文件中

    f=open()
    while True:
      val=input("请输入:")
      f.write(val)
      f.flush()#如果不写flush  文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘
    f.close()
    

    7.关闭

    f.close()
    
    with open("a.txt",mode="r"encoding="utf-8") as v:
      data=v.read()
      #文件执行完毕后将自动关闭
    

    8.文件修改:必须全部拿到内存 进行修改,再重新刷进内存

    with open("a.txt",mode="r" encoding="utf-8") as v:
      data=v.read()
    new_data=data.replace()
    with open("a.txt",mode="w" encoding="utf-8") as v:
      data=v.write(new_data)
    
      
    
    #大文件时候
    f1=open("a.txt",mode="r",encoding="utf-8")
    f2=open("b.txt",mode="w",encoding="utf-8")
    for line in f1:
       new_line=line.replace("aa","bb")
        f2.write(new_line)
    f1.close()
    f2.close()
    
    #3.6之后写法
    with open("a.txt",mode="r" encoding="utf-8") as f1,with open("b.txt",mode="w" encoding="utf-8") as f2:
      for line in f1:
       new_line=line.replace("aa","bb")
        f2.write(new_line)
    
      
    
    
    

    3.练习

    1. 练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
    练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
    user = ['alex','eric']
    con="_".join(user)
    file_object=open("gao.txt",mode="w",encoding="utf-8")
    file_object.write(con)
    file_object.close()
    
    
    1. 练习2:请将user中的元素根据 alex|123形式,写入 'a1.txt' 的文件
    #练习2:请将user中的元素根据 alex|123形式,并写入 'a1.txt' 的文件
    user = [
        {'name':'alex','pwd':'123'},    # alex|123
        {'name':'eric','pwd':'olbody'}, # eric|olbody
    ]
    
    #方案一 读取value值  然后join拼接 加上换行
    # file_object=open("gao.txt",mode="w",encoding="utf-8")
    # for ele in user:
    #     ul="|".join(ele.values())
    #     file_object.write(ul)
    #     ##alex|123eric|olbody #没有换行
    #     # ul = ul + "
    "
    #     # file_object.write(ul)
    #     #添加回车
    #     # alex | 123
    #     # eric | olbody
    # file_object.close()
    
    
    #方案二 占位符实现模式输出
    # file_object=open("gao.txt",mode="w",encoding="utf-8")
    #
    # for ele in user:
    #     temp="%s|%s
    "%(ele['name'],ele["pwd"],)
    #     file_object.write(temp)
    # file_object.close()
    
    
    
    

    3:请将a1.txt中的文件读取出来并添加到一个列表中

    • 去掉文件内容中读取出来的换行( )
    1. 方案一
    # 练习3:请将a2.txt中的文件读取出来并添加到一个列表中 ['alex|123','eric|olbody']
    file_object=open("gao.txt",mode="r",encoding="utf-8")
    data=file_object.read()
    file_object.close()
    ul=[]
    ul.append(data)#data读取出来的字符内容中,包含特殊字符
      所以会直接放到列表中 ,若直接print(data)则会将”
    ”字符串作为一个python语句执行来,所以看不到有
    字符串
    print(ul)
    print(data)
    

    9D6BDF90-DDD7-4BE3-9AC7-22A69A78A7C0

    #去掉换行
    
    #方案一 :读取全部内容  然后按照换行来切割
    file_object=open("gao.txt",mode="r",encoding="utf-8")
    data=file_object.read()
    file_object.close()
    ul=[]#存放data内容
    ul.append(data)
    print(ul)#打印data内的全部内容 ['alex|123
    eric|olbody
    ']
    
    
    con=data.strip()#去掉字符串两边的换行['alex|123
    eric|olbody']
    con=con.split("
    ")#按照
    切割
    
    list_con=[]
    list_con.extend(con)
    print(list_con)
    
    

    D05C82F0-FB5F-4BCB-83C0-04C5914DB4FBD05C82F]1.png)

    2.方案二

    #方案二 :读取全部内容  一行一行遍历 添加到列表中
    result=[]
    file_object=open("gao.txt",mode="r",encoding="utf-8")
    for line in file_object:
        line=line.strip()#去掉每一行换行
        result.append((line))
    file_object.close()
    print(result)
    

    4.总结

    • 文件操作

      • 打开

      • 模式

        • r/w/a(只读只写字符串)

        • r+/w+/a+(可读可写)

        • rb/wb/ab(只读只写二进制)

          • 字符串转换成"二进制"

            v="你好"

            data=v.encode("utf-8")

          • 二进制转换成字符串

            v=""

            data=data.decode("utf-8")

        • r+b/w+b/a+b(可读可写二进制)

      • 操作

          • read():读全部文件
          • read(1):
            1. r:读取一个字符
            2. rb:读取一个字节
          • readline():读取一行
          • readlines():一行一行读取整个文件
        • write

        • seek():调整光标位置

        • tell():获取当前光标的位置

        • flush():强制将内存的内容刷到硬盘文件中

          f=open()
          while True:
            val=input("请输入:")
            f.write(val)
            f.flush()#如果不写flush  文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘
          f.close()
          
        • 关闭

          f.close()
          
        • 文件修改:必须全部拿到内存 进行修改,再重新刷进内存

  • 相关阅读:
    linux 静态库和动态库(共享库)的制作与使用(注意覆盖问题)转
    手机号码格式正则表达式
    项目去除TFS关联、迁移重部署
    Excel中VLOOKUP函数的用法和注意点
    自定义打赏插件
    分享一个无需注册,无次数限制的Smile聊天机器人接口
    TCP/IP
    Java字典树
    平衡二叉树结构 AVL
    二叉搜索树(二叉排序树)BST
  • 原文地址:https://www.cnblogs.com/koukouku/p/10679209.html
Copyright © 2020-2023  润新知