• python基础之文件操作


    文件操作

    • 文件操作 就是 操作文件

    • 文件操作的作用: 持久化存储

      1.file = 路径

      2.mode = 操作文件的方式

      r只读文本 w清空写文本 a追加写文本 ######

      rb只读字节 wb清空写字节 ab追加写字节 ###

      3.encoding = 文件的编码

      4.文件句柄(变量名f)

    一、r: 读

    • f = open("test",mode = "r",encoding = "utf-8")

    • 打开 通过python向操作系统发送指令

    • 文件读取时只能读一遍,执行第二遍的时候是空的

      #print(f.read( ))    #全部读取
      print(f.read(3))  #模式的r的情况下按照字符读取
      print(f.readline().strip)   #读取一行
      print(f.readlines())  #读取多行,以列表的形式存储  输出结果是列表形式
      
    • 路径:

      • 相对路径:相对与当前运行的文件目录

      • import os
        
        print(os.getcwd( ))    #工作路径(当前py文件的父级目录路径)
        
      • 绝对路径:从磁盘根部开始查找的就是绝对路径

    • 转义

        1. 普通的
        1. r"C:Python estxxxx" 防止路径中出现,换行符,空格之类的,导致计算机误认为指令
      • f = open(r"C:Python	estxxxx",mode="r",encoding="utf-8")
        a = f.read()
        print(a)
        
    • rb 读字节 --- 爬虫 读取出来的全部是字节码

      f=open("test.text","rb",encoding="utf-8")
      print(f.read())    报错!  ValueError: binary mode doesn't take an encoding argument
      因为rb(rb+)操作时不支持指定encoding参数 所以不写encoding  如下方式
      f = open("2.png","rb")
      print(f.read())
      

    二、 写

    • w 清空写:有文件时清空文件,没有文件时创建文件

      1.打开文件时自动清空文件内容

      2.写入内容

    • f = open("test","w",encoding="utf-8")
      f.write("今日是好日,明日会更好")
      f.flush()  # 刷新
      f.write("明日是好日,后日会更好.")
      f.close()  # 关闭文件
      打开文件,操作文件,关闭文件
      
    • wb : 清空写字节 爬虫

      • f = open("1.png","wb")
        f1 = open("2.png","rb")
        f.write(f1.read())
        

    三、追加

    • 追加a 一直在文件的末尾进行添加

      f = open("test","a",encoding="utf-8")
      f.write("wdadwa")
      
    • ab追加写字节

      f = open("1.png","wb")
      f1 = open("2.png","ab")
      f.write(f1.read())
      在f末尾追加f文本内容字节
      

    四、其他

    • +操作

    • r+ 读写 可读可写

      特殊的操作:

      先读后写, 写的东西在test原来存在的内容后面添加
      f = open("test","r+",encoding="utf-8")
      a = f.read()  
      f.write("这是读写啊")                可读可写
      #如果只“r”的话,f.write()会报错io.UnsupportedOperation: not writable  不支持写
      
      如果先写后读,会覆盖之前写的内容
      f = open("test","r+",encoding="utf-8")
      f.write("这样读取之后写入的内容会覆盖之前的内容") 
      f.seek(0,0)  #移动光标  移动到文件头部
      a = f.read() 
      因为是先写的,所以光标在末尾,如果不移动光标到头部,读取不到内容 (这样跟w+没有什么区别了就,所以尽量使用r+先读后写)
      
    • w+ 清空写,读

      f = open("test","w+",encoding="utf-8")
      f.write("哈哈哈")
      f.seek(0,0)  #移动光标  移动到文件头部
      print(f,read())
      如果不seek移动光标会读不到内容
      
    • a+:追加写,读

      f = open("test","a+",encoding="utf-8")
      f.write("呵呵")
      f.seek(0,0)  #移动光标  移动到文件头部
      print(f.read())
      就是先写后读,写的内容追加到末尾,然后再读都能读到,而w+是清空,读只能读到写入覆盖后的内容,a+就像r+和w+的结合体
      
    # 最常用的是:r,w,a a+(没文件时) r+(覆盖一些内容)
    
    # 光标
    # f = open("test","r",encoding="utf-8")
    # f.seek(0,0)   # 移动文件头部
    # f.seek(0,1)   # 移动到光标当前位置
    # f.seek(0,2)   # 移动到文件末尾
    # f.seek(3)     # 移动3个字节,根据编码不同决定移动的字节大小
    # print(f.read())
    # print(f.tell())  # 查看光标 返回的是光标位置之前内容字节的数量
    

    with open

    特点:

    1 自动关闭文件

    2 可以同时操作多个文件

    as 起别名

    with open("test1","r",encoding="gbk") as f,
    open("test","r",encoding="utf-8")as f1:
    
    print(f.read())
    print(f1.read())
    

    文件的修改

    "w"没文件的时候创建文件

    with open("test", "r", encoding="utf-8")as f, 
            open("test1", "w", encoding="utf-8")as f1:
        for i in f:
            f1.write(i.replace("嘿嘿", "sb"))
            f1.flush()
    
    import os
    os.rename("test","test2")
    os.rename("test1","test")    源文件test给了test2,(一个暂时不存在的)  修改过的test1给了test
    
    重点记住文本中存储的都是字符串
  • 相关阅读:
    利用Python中SocketServer 实现客户端与服务器间非阻塞通信
    Redis单机配置多实例,实现主从同步
    Django(一) 安装使用基础
    数组模拟环形队列
    单链表原理及应用举例
    中缀表达式转换为后缀表达式(思路)
    中缀表达式转后缀表达式(代码实现)及前缀表达式思路补充
    数组模拟栈(Stack)
    双向链表原理及应用举例
    单向环形链表
  • 原文地址:https://www.cnblogs.com/zzsy/p/12217712.html
Copyright © 2020-2023  润新知