美文网首页
python高级编程技巧(7)

python高级编程技巧(7)

作者: 我是一条池中鱼 | 来源:发表于2017-10-16 19:23 被阅读0次

    一. 如何读写文本文件

    实际案例:

    1. 某文本文件编码格式已知(如UTF-8,GBK,BIG5),在Python2.x 和Python3.x 中分别如何读取该文件?
      Python2.x与3.x中字符串的语义的变化:
      Python2 python3
      ----------------------------
      str -> bytes
      unicode -> str
    解决方案:
    1. python2.x:写入文件前对unicode编码,读入文件后对二进制字符串解码,
    2. python3.x:open函数指定't'的文本模式,encoding指定编码格式。
    代码示例:
    # _*_ coding:utf-8 _*_
    # @Author   : TianYu
    # @Time     : 2017/10/16 13:28
    # @File     : 如何读写文本文件.py
    
    #(1)python 2.x:写入前对Unicode编码,读入文件后对二进制字符串解码
    #该段代码请在Python2.x的环境下运行
    f =open('py2.txt', 'w') #只写
    s = u'你好' #Python2中字符串前加一个 'u' 才代表Unicode字符串
    f.write(s.encode('gbk')) #编码
    f.close()
    f = open('py2.txt', 'r') #只读
    t = f.read() #一次性读出来
    print(t.decode('gbk')) #以相同的编码格式进行解码
    
    #####################################################
    
    #python 3.x:open函数指定't'的文本模式,encoding指定编码格式
    f = open('py3.txt','wt',encoding='utf8') #'t'不写的话默认也是文本模式
    f.write('你好,我爱编程.')
    f.close()
    f = open('py3.txt', 'rt', encoding='utf8') #自动完成编解码
    s = f.read()
    print(s)
    
    

    二. 如何处理二进制文件

    实际案例:

    1. wav是一种音频文件的格式,音频文件为二进制文件。wav文件由头部信息和音频采样数据构成。前44个字节为头部信息,包括声道数,采样频率,PCM位宽等,后面是音频采样数据。
      使用Python,分析一个wav文件头部信息,处理音频数据。
    解决方案:
    1. open函数想以二进制模式打开文件,指定mode参数为‘b’
    2. 二进制数据可以用readinto,读入到提前分配好的buffer中,便于数据处理。
    3. 解析二进制数据及恶意使用标准库中的struct模块的unpack方法。
    代码示例:

    三. 如何设置文件的缓冲

    实际案例:

    1. 将文件内容写入到硬件设备时,使用系统调用,这类I/O操作的时间很长,为了减少I/O操作的次数,文件通常使用缓冲区。(有足够多的数据才进行系统调用)文件的缓冲行为,分为全缓冲、行缓冲、无缓冲。
      如何设置Python中文件对象的缓冲行为?
    解决方案:
    1. 全缓冲:open函数的buffering设置为大于 1 的整数nn为缓冲区大小。
    2. 行缓冲:open函数的buffering设置为 1 。
    3. 无缓冲:open函数的buffering设置为 0 。
    代码示例:
    # _*_ coding:utf-8 _*_
    # @Author   : TianYu
    # @Time     : 2017/10/16 13:48
    # @File     : 如何设置文件的缓冲.py
    
    #通常一个缓冲区块的大小是4096个字节
    #代码的缓冲效果在Linux下的shell环境中利用文件监视能更好的呈现
    
    # 1 全缓冲:open函数的buffering设置为大于 1 的整数 n ,n 为缓冲区大小
    f = open('demo1.txt', 'w', buffering= 2048)
    f.write('+' * 1024)
    f.write('+' * 1023)
    f.write('-' * 2) #缓冲区中的数据大于 n 之后才写入
    
    # 2 行缓冲:open函数的buffering设置为 1
    f = open('demo2.txt', 'w', buffering= 1)
    f.write('abc')
    f.write('\n') #遇到一个换行符就进行一次 I/O操作
    
    # 3 无缓冲:open函数的buffering设置为 0
    f = open('demo3.txt', 'w', buffering= 0)
    f.write("abcd") #实时的写入到磁盘中
    
    要努力要奋斗

    相关文章

      网友评论

          本文标题:python高级编程技巧(7)

          本文链接:https://www.haomeiwen.com/subject/vcjluxtx.html