美文网首页
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)

    一. 如何读写文本文件 实际案例: 某文本文件编码格式已知(如UTF-8,GBK,BIG5),在Python2.x...

  • Python高级编程技巧

    本文展示一些高级的Python设计结构和它们的使用方法。在日常工作中,你可以根据需要选择合适的数据结构,例如对快速...

  • python高级编程技巧(3)

    一. 如何实现用户的历史记录功能 实际案例: 很多应用程序都有浏览用户的历史记录的功能,例如:浏览器可以查看最近访...

  • python高级编程技巧(8)

    一. 如何将文件映射到内存? 实际案例: 在访问某些二进制文件时。希望能把文件映射到内存中,可以实现随机访问。(f...

  • python高级编程技巧(6)

    一. 如何将多个小字符串拼接成一个大的字符串 实际案例: 在设计某网络程序时,我们自定义了一个基于UDP的网络协议...

  • python高级编程技巧(5)

    一. 如何拆分含有多种分隔符的字符串 实际案例: 我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不...

  • python高级编程技巧(4)

    一. 如何进行反向迭代以及如何实现反向迭代 实际案例: 实现一个连续浮点数发生器FloatRange(和xrang...

  • python高级编程技巧(1)

    一. 如何在列表、字典、集合中根据条件筛选数据 实际案例: 过滤掉列表[3,6,7,9,-1,-2,...]中的负...

  • python高级编程技巧(2)

    一. 如何根据字典中值的大小,对字典中的项进行排序 实际案例: 某班英语成绩以字典形式存储为:{"LiLei": ...

  • 廖雪峰python3 教程

    观其大纲 1 python基础 2 函数 3 高级特性 4 函数式编程 5 模块 6 面向对象编程 7 面向对象高...

网友评论

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

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