文件的操作——读写方式

时间:2022-05-31 17:19:51
  • 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'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\xad\xe5\x9b\xbd\r\n\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'
    • 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(
      '\nHello world')#
      f.close()
      f = open("a.txt","ab")#
      f.write(
      '\nHello world'.encode('utf-8'))#
      f.close()

 

  • 3.读写模式:'r+',写的内容追加到了文本的最后面

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