zoukankan      html  css  js  c++  java
  • Python之文件操作

    1. 操作文件三要素:(打开文件后,一定要关闭)
      a. 路径:E:pythonprojectsaa.txt
      b. 编码:utf-8
      c. 模式:只读 只写 读写

        r:只读 rb:二进制格式读
        w:只写 wb:二进制格式写
        a:追加 ab:二进制格式追加

        r+:能读能写(最常用,最强大)
        w+:写读(先清空再写),文件不存在时创建
        a+:追加写读。如果该文件已存在,追加写。如果该文件不存在,创建新文件用于读写。
        r+b w+b a+b (按二进制格式)

     

    2. 文件对象语法:
      file object = open(file_name [, access_mode][, buffering])

      各个参数的细节如下:
        file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。

        access_mode:
          access_mode决定了打开文件的模式:只读,写入,追加等。
          所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

        buffering:
          如果buffering的值被设为0,就不会有寄存。
          如果buffering的值取1,访问文件时会寄存行。
          如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。
          如果取负值,寄存区的缓冲大小则为系统默认。

     

    3. 只读 读取utf-8编码数据,转换成Unicode编码的数据 文件在硬盘上时,一定是某种编码,utf-8或gbk等等
      a. mode = "r" 模式 转换
      open(文件路径,encoding= "utf-8",mode=“r”)
      

      b. mode ="rb" 不做转换 读取的时候 rb模式的表现形式 bytes
      open(文件路径,mode=“rb”) 不常用

     

      绝对路径 E:pythonprojectsaa.txt
      相对路径 直接写文件名

    # a-- 读取在硬盘里的utf-8编码数据,读到内存后转换成Unicode编码的数据,在内存里的表现形式为字符串
    obj = open("D:\abc.txt",encoding="utf-8",mode="r")
    content = obj.read()     # 字符串类型
    obj.close()
    print(content)
    # b-- 不设置编码转换的时候,表现形式为bytes类型
    obj = open("D:\abc.txt",mode="rb")
    content = obj.read()     # bytes类型
    obj.close()
    print(content)
    
    obj = open("user.txt",encoding="utf-8",mode="r")
    content = obj.read()     # 字符串类型
    obj.close()
    print(content)
    
    


    4. 只写 不存在时创建,存在时先清空然后覆盖内容

    #a---- open(文件路径,encoding= "utf-8",mode="w")
    obj = open("a.txt",encoding="utf-8",mode="w")
    obj.write("hello word")
    obj.close()
    
    #b----  open(文件路径,mode=“wb”) 不常用
    obj = open("a.txt",mode="wb")
    obj.write("hello word 00000".encode("utf-8"))
    obj.close()
    
    #写完之后不能读
    obj = open("a.txt",mode="w")
    content = obj.read()
    obj.close()
    print(content)
    

      

    5. 只追加 a ******a+只能在最后写******

    obj = open("a.txt",encoding="utf-8",mode="a")
    obj.write("小红")
    obj.close()
    
    obj = open("a.txt",mode="ab")
    obj.write("000".encode("utf-8"))
    obj.close()
    
    # r+  读写  默认在最后写
    obj = open("a.txt",encoding="utf-8",mode="r+")
    data = obj.read()    # 读
    obj.write("gggg")    # 写,单独写的时候,会从头开始写,有内容的话会覆盖
    obj.close()
    print(data)
    
    obj = open("a.txt",encoding="utf-8",mode="r+")
    obj.write('666')    # 写,单独写的时候,会从头开始写,有内容的话会覆盖
    obj.close()
    
    obj = open("a.txt",encoding="utf-8",mode="r+")
    data = obj.read(4)
    obj.write('666')  # 依旧写到最后位置
    obj.close()
    print(data)
    
    obj = open("a.txt",encoding="utf-8",mode="r+")
    data = obj.read(2)
    obj.seek(1)     # seek是字节,汉字三个字节一位,标明了要写入的位置
    obj.write("0")    # 单独写的时候,会从头开始写,有内容的话会覆盖
    obj.close()       # 指定写的时候,有内容的话会覆盖,(只是看不到,)
    print(data)
    

      

    常用的文件对象方法:

    # read(读到第几个字符(r)字节(rb))   默认读取所有文件
    obj = open("a.txt",encoding="utf-8",mode="r+")
    data = obj.read(2)
    print(data)
    
    obj = open("a.txt",mode="r+b")
    data = obj.read(2)
    print(data)
    
    # write("字节(wb)或字符串(w)")#不存在时创建,存在时先清空然后覆盖内容
    obj = open("a.txt",encoding="utf-8",mode="w+")
    obj.write("2")
    obj.close()
    
    # seek(n,location)  指定位置写并覆盖 指定指针位置  不管是r还是rb  n永远都是字节 ;location指针位置,可以不写,0,1,2是三个模式,0是开头,1是默认,2是最后
    obj = open("a.txt",encoding="utf-8",mode="r+")
    obj.seek(1)     # seek是字节,汉字三个字节一位,标明了要写入的位置
    data = obj.read(2)
    obj.close()
    print(data)
    
    # **tell()  读取当前指针在哪
    obj = open("a.txt",encoding="utf-8",mode="r+")
    
    # obj.tell()
    # obj.close()
    num = int(input("请输入要读取的字符:"))    # 因为编码不同,当文件里是汉字时,写入数字和字母会出现错误,因为字母,数字和汉字所占的位数不同导致的
    data = obj.read(num)
    obj.seek(obj.tell())
    obj.write("34")
    
    flush()     # 将内存中的内容强制刷到硬盘
    obj = open("aaa",encoding="utf-8",mode="w")
    while True:
        data = input(">>>")
        obj.write(data)     # 因为无法执行close,所以写的只能写到内存中
        obj.flush()     # 强刷会把内容强制刷到硬盘里,就能读到东西了
    obj.close()
    
    obj = open("aaa",encoding="utf-8",mode="r"+)
    val = obj.read()
    print(val)
    
    readline()      # 只读一行
    obj = open("a.txt",encoding="utf-8",mode="r+")
    data = obj.readline()
    print(data)     # 读一次之后,指针在第2个位置,再次去读就会从下一个位置开始读
    data = obj.readline()
    print(data)
    
    readlines()      # 按行读到所有东西
    xreadlines()   # py3里没有这个功能了
    
    #重点:
    # for line in obj : 把每一行都打印出来        等价于py2里的 xreadlines()
    obj = open("a.txt",encoding="utf-8",mode="r+")
    for line in obj:
        print(line)
    obj.close()
    
    # 手动关毕
    # 打开文件后,一定要关闭
    
    obj = open(文件路径,mode=rb)
    xxxx
    obj.close()
    
    #自动关闭
    with open(文件路径,mode= "rb") as obj:
         xxx  # 代码执行完毕后,自动关闭文件
    
    truncate()       # 截取文件内容,根据指针位置,只保留之前的数据
    obj = open("a.txt",encoding="utf-8",mode="r+")
    obj.seek(3)
    obj.truncate()
    obj.close()
    
    writeable()     # 是否可写
    # 以r 模式打开的时候不可写
    
    readable()     #是否可读
    # 以w 模式打开的时候不可读
    
    fileno()   # 文件描述符,就是一个数字
    

      

  • 相关阅读:
    (Good Bye 2019) Codeforces 1270B Interesting Subarray
    (Good Bye 2019) Codeforces 1270A Card Game
    Codeforces 1283D Christmas Trees(BFS)
    Codeforces 1283C Friends and Gifts
    Codeforces 1283B Candies Division
    1095 Cars on Campus (30)
    1080 Graduate Admission (30)
    1099 Build A Binary Search Tree (30)
    1018 Public Bike Management (30)
    1087 All Roads Lead to Rome (30)
  • 原文地址:https://www.cnblogs.com/chitalu/p/9674875.html
Copyright © 2011-2022 走看看