• 文件的操作(一)——读写方式


    • Q:文件在硬盘是如何存储?
      • 以某种编码格式的“010101”保存在硬盘上,比如,如果是以utf-8格式写入的“你好”,则保存在硬盘上的是utf-8编码对应的二进制,是3个字节,如果以gbk格式写入的“你好”,则保存的是gbk编码对应的二进制,是2个字节
    • python的文件操作分为读、写、修改
    • 1.读文件

      • 示例1:以指定编码形式读文件,‘r+encoding'

        f = open(file="a.txt",mode='r',encoding="utf-8") #file:文件名,如果文件在同一个工程目录下,可不指定路径,否则,需指定,mode:‘r’表示只读(可修改为其他模式)
                                                         #encoding="utf-8":将硬盘存入的01以utf-8的编码规则去“断句”,再将“断句”后的utf-8转换成unicode的01,unicode中有01和字符的对应关系
        data = f.read()#读取文件所有内容,内容是已经转换完毕的字符串
        data2 = f.read()#读取文件所有内容,内容是已经转换完毕的字符串
        print(data)
        print("------data2------")
        print(data2)
        f.close()#关闭文件

        结果解析:第一次f.read后,光标已经到文本最后了,不会自动返回首行,因此,第二次在读的时候是没有数据的

      • 你好,中国
        你好,世界
        ------data2------
      • 示例2:以二进制模式读文件,'rb‘’
      • f = open(file="a.txt",mode='rb')#rb:只读,以二进制格式读取,读取内容是硬盘上原来以某种编码格式保存的01,即某种编码格式的字节类型,不需指定encoding
        data = f.read()
        print(data)
        f.close()
        b'xe4xbdxa0xe5xa5xbdxefxbcx8cxe4xb8xadxe5x9bxbd
        xe4xbdxa0xe5xa5xbdxefxbcx8cxe4xb8x96xe7x95x8c'
      • Q:假如你不知道你要处理的文件是什么编码可怎么办呢?
      • A:import chardet
      • import chardet
        f = open("a.txt","rb")
        data = f.read()
        f.close()
        result = chardet.detect(data)
        print(result)
        {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
        
      • 循环输出文件

      • f = open("a.txt","r",encoding='utf-8')
        for line in f:
            print(line)
        f.close()
        你好,中国
        
        你好,世界
        
        Process finished with exit code 0
        

        每行之间多出的空行是因为print输出时,自带空行  

    • 2.写文件,如果文件不存在,则先创建一个文件

      • 示例1:以指定编码形式写文件:'w+encoding'
      • f = open("a.txt","w",encoding='utf-8')#w:只写,encoding='utf-8',将要写入的unicode字符串编码成utf-8格式
        f.write('Hello world')#表示写入内容,写入的内容是unicode字符串类型,内部会根据encoding转换为指定编码的01,即字节类型
        f.close()
      • 示例2:以二进制形式写文件,‘wb’
      • f = open("a.txt","wb")#wb:只以二进制格式写
        f.write('Hello world'.encode('utf-8'))#写入内容,写入的内容必须是字节类型,也就是某种编码格式的二进制
        f.close()
      • 1和2的区分及注意事项
        • 文件操作时,以‘w’和‘wb’模式打开,则只能写,并且在打开的同时会先将文件原有的内容清空
        • 写入到硬盘时,必须是某种编码格式的01,打开时需注意:
          • wb:写入时需要直接传入以某种编码的01,即字节类型
          • w和encoding:写入时需要传入unicode字符串,内部会根据encoding指定的编码将unicode字符串转换为该编码的01
      • 追加:把内容追加到文件尾部   'a'   'ab'
      • f = open("a.txt","a",encoding='utf-8')#
        f.write('
        Hello world')#
        f.close()
        f = open("a.txt","ab")#
        f.write('
        Hello world'.encode('utf-8'))#
        f.close()
    • 3.读写模式:'r+',写的内容追加到了文本的最后面

      • f = open("a.txt","r+",encoding='utf-8')#
        print(f.read())
        f.write('
        Hello world')#
        f.close()
    • 4.写读模式:‘w+’,会先把文件的内容清空,再写新的内容,相比w模式,只是支持一个读功能,且还只能读已经写入的新内容,没有太大用途

  • 相关阅读:
    MyBatis学习篇
    常见两大类(个人和企业)登记主体小程序的区别
    Redis学习篇
    Spring注解之参数校验@Validated和@Valid
    Spring学习篇
    Windows安装OnlyOfiice教程
    Java序列化和反序列化
    数据库种类大全
    C# Web请求URL编码转换 URL转码 UrlDecode UrlEncode
    使用DockerCertBot获取SSL证书
  • 原文地址:https://www.cnblogs.com/GraceZ/p/7868775.html
Copyright © 2020-2023  润新知