• python文件处理-读、写


      Python中文件处理的操作包括读、写、修改,今天我们一起来先学习下读和写操作。

    一、文件的读操作

      例一:

    #文件读操作
    
    f = open(file="first_blog.txt",mode = 'r',encoding='gbk')
    #‘r’表示只读模式(打开仍然为文件),encoding = 'gbk'表示原文件的存储格式为'gbk',打开时必须告诉程序将gbk转成unicode(python3编码默认Unicode)
    
    data = f.read()  # 读取所有内容,内容是已经转换完毕的字符串
    
    print(data)  # 打印到屏幕
    
    f.close()#文件打开后必须关闭

    '''
    输出:
    write by congcong

    Hello world!

    这是我用python打开的第一个文件。

    '''

      例二:

    #文件二进制读模式
    
    f = open(file="first_blog.txt",mode = 'rb')
    #‘rb’表示以二进制读模式(硬盘存为存的二进制打开就为二进制,并且不再需要指定编码)
    
    data = f.read()
    
    print(data)
    
    f.close()
    
    '''
    输出:
        b'write by congcong
    
    Hello world!
    
    xd5xe2xcaxc7xcexd2xd3xc3pythonxb4xf2xbfxaaxb5xc4xb5xdaxd2xbbxb8xf6xcexc4xbcxfexa1xa3
    
    '
        
    '''

      大家能看出例一和例二的区别吗?

      区别在于例二直接以rb模式打开了文件 ,rb是指二进制模式,数据读到内存里直接是bytes格式,

    如果想要看内容,还需要手动decode,因此在文件打开阶段,不需要指定编码。

      那如果我们不知道一个文件是以什么编码保存的怎么办呢?

      方式一:尝试使用各种编码方式,总有一款是的,的确可以,不过感觉傻傻的,有没有更好的方法呢?

      方法二:导入一个叫 chardet 的外部工具(首先你要联网安装,Python3安装方法命令行输入:pip3 install chardet)

    import chardet
    res = chardet.detect(open('first_blog.txt',mode='rb').read())
    print(res)
    
    '''
    输出:
    {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}     # confidence 表示可信程度
    '''

      例三(循环读取):

    # -*- coding:utf-8 -*-
    
    f = open("for_line.txt",mode = 'r',encoding='gbk')
    
    for line in f:  #按行读取
        print(line)
    
    f.close()
    
    '''
    输出:
        键盘字母排序如下:
    
        qwertyuiop
    
        asdfghjkl
    
        zxcvbnm
    '''
    #中间有空行的原因:print本身有换行的特点

      注意:   

    • 文件操作时,以 “r”或“rb” 模式打开,则只能读,无法写入;
    • 硬盘上保存的文件都是某种编码的0101010,打开时需要注意:
      • rb,直接读取文件保存时原生的0101010,在Python中用字节类型表示
      • r和encoding,读取硬盘的0101010,并按照encoding指定的编码格式进行断句,再将“断句”后的每一段0101010转换成unicode的 010101010101,在Python中用字符串类型表示

    二、文件的写操作

      写操作里可以分为覆盖写文件(‘w’和‘wb’)和追加写文件(‘a’和‘ab’)两大类。

      1、覆盖写文件

        示例如下:  

    # -*- coding:utf-8 -*-
    #特别注意当mode的模式为‘w’时,是创建新文件,当文件名与原文件相同时,原文件被清空重写
    f = open("write.txt",mode = 'w',encoding='gbk') #普通文件的写
    f.write('这是第一个我用Python写的文件!') # 自动将写的Unicode字符串转为gbk编码的二进制串。
    f.close()
    
    f2 = open("write2.txt",mode = 'wb') #以二进制写文件,主要用于视频图片等文件的传输
    f2.write("这是用二进制写的第一个文件!".encode('gbk'))# 二进制写必须要加encode(),将写的unicode进行编码成指定格式的二进制存储,Python3默认是utf-8
    f2.close()  

      注意:

        文件覆盖写操作时,以 “w”或“wb” 模式打开,则只能写,并且在打开的同时会先将内容清空。

        写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

      •   wb,写入时需要直接传入以某种编码的0100101,即:字节类型,二进制写必须加encode()将写的Unicode
      •   w 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010  

    2、追加写文件

        示例如下:

    #特别注意当mode的模式为‘a’时,是文件追加模式,就是接着写文件
    f3 = open('write.txt',mode='a',encoding='gbk')
    f3.write('
    这是追加的文本1!')  # 自动将写的Unicode字符串转为gbk编码的二进制串。

    f3.write(' 这是追加的文本2!')
    f3.write('
    这是追加的文本3!')
    f3.close()

    f4 = open('write3.txt',mode = 'ab')#以二进制追加文件,主要用于视频图片等文件的传输

    f4.write(' 这是用二进制追加的文件!'.encode('gbk')) # 二进制追加写也必须要加encode(),将写的unicode进行编码成指定格式的二进制存储,Python3默认是utf-8
    f4.close()

      文件追加写操作时,以 “a”或“ab” 模式打开,则只能追加,即:在原来内容的尾部追加内容

      写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

      •   ab,写入时需要直接传入以某种编码的0100101,即:字节类型,二进制追加写必须加encode()将写的unicode字符串转为指定编码的二进制串,不指定时Python3默认utf-8。
      •   a 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010

     三、文件的读写(r+)和写读(w+)混合模式 

      1、文件的读写(r+)

        示例如下:

    #-*-coding:utf-8-*-
    
    f = open(file='write.txt',mode='r+',encoding='gbk') # r+ 表示读写模式
    print('读写前:
    ',f.read())
    f.write('这是读写模式下的内容
    ')
    f.write('这是读写模式下的内容
    ')
    print('读写后:
    ',f.read())
    f.close()
    '''
    读写前:
     这是第一个我用Python写的文件!
    这是追加的文本1!
    这是追加的文本2!
    这是追加的文本3!
    读写后:
    '''
    

     注意:读写模式下只能查看之前已存在的内容,而写入的内容无法再读出来(与光标的移动有关,下一篇会细说),打开文件查看,写入的内容已经追加到了之前写的最后面。

      2、文件的写读(‘w+’,使用非常少,了解即可)

        示例如下:

    # -*-coding:utf-8-*-
    
    f = open(file='write.txt',mode='w+',encoding='gbk')
    print('写读前:
    ',f.read())
    f.write('这是写读模式下的内容
    ')
    f.write('这是写读模式下的内容
    ')
    print('写读后:
    ',f.read())
    f.close()
    
    '''
    写读前:
     
    写读后:
    '''
    

     注意: 文件的写读模式会先清空原先文件里存在的内容,再写入你即将要写的内容,相当于覆盖写,不同在于可以查看写入的内容,

    需要移动文件中光标位置。下一篇的文件常用操作方法中会细品。

      

        

      

  • 相关阅读:
    mysql字符集编码整理
    mysql 修改字符集
    数据库高并发的设计
    mysql 中 character set 与 collation 的理解
    阿里代码规范检查工具的安装使用
    安卓学习Day05
    安卓学习Day04
    安卓学习Day03
    安卓学习day02
    安卓学习Day1
  • 原文地址:https://www.cnblogs.com/schut/p/8410367.html
Copyright © 2020-2023  润新知