zoukankan      html  css  js  c++  java
  • 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()
    
    '''
    写读前:
     
    写读后:
    '''
    

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

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

      

        

      

  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/schut/p/8410367.html
Copyright © 2011-2022 走看看