• 9、bytes类型,文件处理


    一、bytes类型

      x = "上"

      priint([x,])

    #             编码                     编码
    # 字符-------------------->unicode------------->其他编码
    # 
    #             解码                      解码
    # 字符<--------------------unicode<-------------其他编码

      Python encode() 方法以 encoding 指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案。

      

      Python decode() 方法以 encoding 指定的编码格式解码字符串。默认编码为字符串编码。

    print(x)
    res = x.encode("gbk")
    print(type(res))
    
    #强调:在python3里,只会将unicode格式的数字转成字符,其余编码格式的数字均不会转换
    print(res)
    print(res.decode("gbk"))

    二、文件处理

      控制文件读写操作的模式:

      r:只读(默认的)

      w:只写

      a:只追加

      控制文件读写内容的模式:

      t:控制读写的内容都是字符串类型(默认的)

        特点:

          1、只适用于文腾文件

          2、一定要指定encoding参数

      b:控制读写的内存都是bytes类型

          1、适用于所有文件(都是转为二进制字节)

          2、一定不要指定encoding参数

      r(只读):如果文件不存在则会报错,文件存在则会将文件指针跳到整个文件的开头

      

    f = open(r'a.txt',mode='rt',encoding='utf-8')
    print(f.read())
    f.close()

      w(只写):如果文件不存在则会创建新的空文档,如果文件存在则会清空,文件指针跳到文件开头

      

    f = open(r'b.txt',mode='wt',encoding='utf-8')
    f.write("你好啊1
    ")
    f.write("你好啊2
    ")  # 打开了文件不关闭的情况下,新写入的内容永远跟在老内容之后
    f.write("你好啊3
    ")
    
    f.close()

      a(只追加):如果文件不存在则会创建空文档,如果文件存在则会清空,文件指针跳到文件夹末尾

      

    f = open(r'c.txt',mode='at',encoding='utf-8')
    f.write("你好啊1
    ")
    f.write("你好啊2
    ")  # 打开了文件不关闭的情况下,新写入的内容永远跟在老内容之后
    f.write("你好啊3
    ")
    f.close()

      读写模式

      r+t

      w+t

      a+t

      例如:

      

    f = open(r'c.txt',mode='r+t',encoding='utf-8')
    # print(f.readable())
    # print(f.writable())
    # print(f.read())
    
    f.write("h")
    f.close()

      b模式

      

    with open('c.txt',mode='rb') as f:
        res = f.read()
        # print(type(res))
        # print(res)
        print(res.decode('utf-8'))
    
    
    
    
    with open('1.mp4',mode='rb') as f:
        print(f.read())
        for line in f:
            print(line)

     三、文件操作方法

        readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理,如果碰到结束符 EOF 则返回空字符串。

        readline() 方法用于从文件读取整行,包括 " " 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 " " 字符。

    with open('a.txt',mode='rt',encoding='utf-8') as f:
         res = f.read()
         print(res)
         print('=========================')
         res = f.read()
         print(res)
    
         print(f.readline())
    
         res = f.readlines()
         print(res)
            pass

        

        writelines() 方法用于向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表。换行需要制定换行符

    with open('a.txt',mode='wt',encoding='utf-8') as f:
         f.write("1111
    222
    333
    ")
    
        lines = ['aaa
    ',"bbbb
    ","cccc
    "]
         for line in lines:
             f.write(line)
    
         f.writelines(lines)
         f.writelines("hello")

        补充:

    with open('a.txt', mode='wt', encoding='utf-8') as f:
        f.write("hello")  # 在a。txt里面写文件
        f.flush()  # flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,
    
        # 同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
        print(f.closed)  # 判断a.txt这个文件是否关闭--此时没有关闭
        print(f.name)  # 查看当前编辑的文件名
    
    print(f.closed)  # 判断当前的文件是否关闭--此时关闭

    四、被动控制文件指针移动

      只有t模式下的read(n)的n代表的是字符个数,除此以外都是字节个数

      

    with open('a.txt',mode='rt',encoding='utf-8') as f:
    res = f.read(6)
    print(res)


    with open('a.txt',mode='rb') as f:
    res = f.read(8)
    print(res.decode('utf-8'))

    with open('a.txt',mode='at',encoding='utf-8') as f:
    f.truncate(6)
    #truncate() 方法用于从文件的首行首字节开始截断,截断文件为 size 个字节,
    无 size 表示从当前位置截断;截断之后 V 后面的所有字节被删除,
    其中 Widnows 系统下的换行代表2个字节大小

    五、主动控制指针移动

      f.seek(移动的字节个数,模式)

      模式有三种:

      0:永远参照文件开头

      1:参照当前所在的位置

      2:永远参照文件末尾

      #注意:只有0模式可以在t下使用,1和2只能在b模式下使用

    with open('a.txt',mode='rt',encoding='utf-8') as f:
        f.seek(3,0)
        f.seek(5,0)
        print(f.tell())
    
    with open('a.txt',mode='rb') as f:
        f.seek(3,1)
        f.seek(5,1)
        print(f.tell())
        res=f.read()
        print(res.decode('utf-8'))
    
    with open('a.txt',mode='rb') as f:
    f.seek(-3,2)
    print(f.tell())
    f.seek(0,2)

    六、修改文件的方法

      修改文件的方式一:

      1、先将文件的内容全部读入内存中

      2、在内存中完成修改

      3、将修改后的内容覆盖回原文件

      ps:耗费内存不耗费硬盘**所以学习运维的要注意,大的日志文件不要直接操作

    with open('e.txt', mode="rt", encoding='utf-8') as f:
        data = f.read()
    
    with open('e.txt',mode='wt',encoding='utf-8') as f1:
        f1.write(data.replace('egon','EGON'))

      修改文件的方式二:

      1、以读的方式打开原文件,然后以写的方式打开另一个临时文件

      2、读原文件的一行内容到内存,然后再内存中修改完毕后再写入临时文件,循环往复直到全部改完

      3、删除原文件,将临时文件重命名为原文件名

      ps:耗费硬盘不耗费内存

    import os
    
    with open('e.txt',mode='rt',encoding='utf-8') as src_f,
    
    open('.e.txt.swp',mode='wt',encoding='utf-8') as dst_f: for line in src_f: dst_f.write(line.replace('EGON','egon')) os.remove('e.txt') os.rename('.e.txt.swp','e.txt')
  • 相关阅读:
    maven工程下的“run as application”
    Spark机器配置计算
    数学思路
    关联和依赖
    spark数据倾斜
    windows的DOS窗口如何修改大小
    MySQL的索引创建、删除
    使用composer命令创建laravel项目命令详解
    Windows平台查看端口占用情况
    使用composer安装laravel
  • 原文地址:https://www.cnblogs.com/zhaokunhao/p/14189090.html
Copyright © 2020-2023  润新知