码迷,mamicode.com
首页 > 编程语言 > 详细

python IO 文件读写

时间:2018-02-27 10:57:42      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:end   file   readline   模式   encoding   nbsp   输出   错误   二进制   

IO

由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。

如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办法:

第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;

另一种方法是CPU不等待,只是告诉磁盘,“您慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO。

同步和异步的区别就在于是否等待IO执行的结果。

 

文件读写

读文件
以读文件的模式打开一个文件对象,Python内置的open()函数,传入文件名和标示符

>>> f = open(‘/Users/michael/test.txt‘, ‘r‘)
标示符‘r‘表示读

如果文件不存在,open()函数就会抛出一个IOError的错误

如果文件打开成功,调用read()方法可以一次读取文件的全部内容

>>> f.read()
‘Hello, world!‘#Python把内容读到内存,用一个str对象表示

close()方法关闭文件
>>> f.close()


调用read(size)方法,每次最多读取size个字节的内容。
调用readline()可以每次读取一行内容,
调用readlines()一次读取所有内容并按行返回list。

为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
try:
f = open(‘/path/to/file‘, ‘r‘)
print(f.read())
finally:
if f:
f.close()

简化:
with open(‘/path/to/file‘, ‘r‘) as f:
print(f.read())
这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

二进制文件

要读取二进制文件,比如图片、视频等等,用‘rb‘模式打开文件
>>> f = open(‘/Users/michael/test.jpg‘, ‘rb‘)
>>> f.read()
b‘\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...‘ # 十六进制表示的字节


要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:

>>> f = open(‘/Users/michael/gbk.txt‘, ‘r‘, encoding=‘gbk‘)
>>> f.read()
‘测试‘

遇到有些编码不规范的文件,pen()函数还接收一个errors参数
>>> f = open(‘/Users/michael/gbk.txt‘, ‘r‘, encoding=‘gbk‘, errors=‘ignore‘)


写文件

传入标识符‘w‘或者‘wb‘表示写文本文件或写二进制文件:

>>> f = open(‘/Users/michael/test.txt‘, ‘w‘)
>>> f.write(‘Hello, world!‘)

防止丢失使用with语句
with语句
with open(‘/Users/michael/test.txt‘, ‘w‘) as f:
f.write(‘Hello, world!‘)

追加到文件末尾
传入‘a‘以追加(append)模式写入

python IO 文件读写

标签:end   file   readline   模式   encoding   nbsp   输出   错误   二进制   

原文地址:https://www.cnblogs.com/wander-clouds/p/8464242.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!