设为首页 收藏本站
查看: 900|回复: 0

[经验分享] python学习过程之IO编程

[复制链接]

尚未签到

发表于 2018-8-14 06:33:44 | 显示全部楼层 |阅读模式
  IO编程
  IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。
  由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。两种处理方法同步IO和异步IO。
  很明显,使用异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂,反正异步IO的复杂度远远高于同步IO。
  操作IO的能力都是由操作系统提供的,每一种编程语言都会把操作系统提供的低级C接口封装起来方便使用,Python也不例外。
  读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
  基本使用
  open("路径",“r”)如果打开不成功,会抛出错误,如果打开成功,可以进一步使用read(),最后使用close()
  可以使用try....finally....以防止出错后关闭不了
  也可以 最简单 with open("路径",“r”) as f
file-like Object
  像open()数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()方法就行。stringIO就是在内存中创建的file-like Object,常用作临时缓冲。
  前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,"rb"模式打开文件即可
  要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数
  遇到有些编码不规范的文件,你可能会遇到编码错误因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略
  写文件和读文件是一样的 r 换成w
StringIO
  很多时候,数据读写不一定是文件,也可以在内存中读写。
  StringIO顾名思义就是在内存中读写str。
  要把str写入StringIO,我们需要先创建一个StringIO.getvalue()方法用于获得写入后的str
BytesIO
  StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。
  BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes
  操作文件和目录
  操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中,这一点要注意一下。查看、创建和删除目录可以这么调用:
  # 查看当前目录的绝对路径:
  >>> os.path.abspath('.')
  '/Users/michael'
  # 在某个目录下创建一个新目录,
  # 首先把新目录的完整路径表示出来:
  >>> os.path.join('/Users/michael', 'testdir')
  '/Users/michael/testdir'
  # 然后创建一个目录:
  >>> os.mkdir('/Users/michael/testdir')
  # 删掉一个目录:
  >>> os.rmdir('/Users/michael/testdir')
  把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数,这样可以正确处理不同操作系统的路径分隔符。在linux/Unix/Mac下,os.path.join()返回这样的字符串:
  part-1/part-2
  而Windows下会返回这样的字符串:
  part-1\part-2
  同样的道理,要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数,这样可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:
  >>> os.path.split('/Users/michael/testdir/file.txt')
  ('/Users/michael/testdir', 'file.txt')
  os.path.splitext()可以直接让你得到文件扩展名,很多时候非常方便:
  >>> os.path.splitext('/path/to/file.txt')
  ('/path/to/file', '.txt')
  这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们只对字符串进行操作。
  文件操作使用下面的函数。假定当前目录下有一个test.txt文件:
  # 对文件重命名:
  >>> os.rename('test.txt', 'test.py')
  # 删掉文件:
  >>> os.remove('test.py')
  但是复制文件的函数居然在os模块中不存在!原因是复制文件并非由操作系统提供的系统调用。理论上讲,我们通过上一节的读写文件可以完成文件复制,只不过要多写很多代码。
  幸运的是shutil模块提供了copyfile()的函数,你还可以在shutil模块中找到很多实用函数,它们可以看做是os模块的补充。
  最后看看如何利用Python的特性来过滤文件。比如我们要列出当前目录下的所有目录,只需要一行代码:
  >>> [x for x in os.listdir('.') if os.path.isdir(x)]
  ['.lein', '.local', '.m2', '.npm', '.ssh', '.Trash', '.vim', 'Adlm', 'Applications', 'Desktop', ...]
  要列出所有的.py文件,也只需一行代码:
  >>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
  ['apis.py', 'config.py', 'models.py', 'pymonitor.py', 'test_db.py', 'urls.py', 'wsgiapp.py']
  序列化略过
  学习python3廖雪峰过程整理

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551308-1-1.html 上篇帖子: Python---高阶函数 下篇帖子: python datetime模块的日常使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表