Python –同步IO学习笔记
来源:互联网 发布:软件ui界面设计 编辑:程序博客网 时间:2024/06/03 14:33
Python –同步IO学习笔记
1. IO 分为Input和Output,以计算机逻辑模块为“本位”(一般说得就是内存),从外部设备传入数据到内存的过程就是Input,从内存传出到外部设备的过程就是Output。
2. IO分为同步IO和异步IO,本章讲的是同步IO。即在传输完成返回报告之前,发送端一直在等待信号的模式。(类似socket阻塞模式)。
文件读写:
1. open函数进行文件读写操作(也可以用file函数),例:
"""
# 保证文件最后关闭
try:
f = open('E:/untitled/1.txt', 'r')# 或'rb' #斜杠永远都是正确的,即使是在Windows环境下。
print(f.read())
finally:
if f:
f.close()
"""
读文件用‘r’,写文件用‘w’。‘r+’和‘w+’均可以进行文件读写操作。
‘a’以追加模式打开文件,文件指针在末尾,‘a+’以读写模式打开文件,文件指针在末尾。加b’表示以二进制进行文件读写。
2. 文件必须要关闭(占用资源),但若出现错误须强制关闭,可用try…finally,推荐用with,with语句不只是针对文件而言的;它是一个用来创建运行时环境的通用框架(generic framework),告诉对象它们正在进入和离开一个运行时环境。如果该对象是流对象,那么它就会做一些类似文件对象一样有用的动作(就像自动关闭文件)。但是那个行为是被流对象自身定义的,而不是在with语句中。还有许多跟文件无关的使用上下文管理器(context manager)的方法。例:
"""
# with 自动调用close方法
with open('E:/untitled/1.txt', 'r', encoding='gbk', errors='ignore') as f:
print(f.read(2))
"""
3. 操作文件对象的方法
(来自博客http://blog.csdn.net/cnmilan/article/details/9142561)
f.close() 关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。
f.fileno() 获得文件描述符,是一个数字
f.flush() 刷新输出缓存
f.isatty() 如果文件是一个交互终端,则返回True,否则返回False。
f.read([count]) 读出文件,如果有count,则读出count个字节。
f.readline() 读出一行信息。
f.readlines() 读出所有行,也就是读出整个文件的信息。
f.seek(offset[,where]) 把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。
f.tell() 获得文件指针位置。
f.truncate([size]) 截取文件,使文件的大小为size。
f.write(string) 把string字符串写入文件。
f.writelines(list) 把list中的字符串一行一行地写入文件,是连续写入文件,没有换行。
4. seek()和tell()方法总是以字节的方式计数,但是,由于你是以文本文件的方式打开的,read()方法以字符的个数计数。在存在中文情况下,不匹配
例:
withopen('E:/untitled/1.txt','r+')as f:
#f.write('HelloDavid 你好 大卫')
print(f.read(13))
print(f.read())
print(f.seek(14))
print(f.tell())
print(f.read(14))
print(f.tell())
结果:
Hello David你
好大卫
14
14
好大卫
21
5. 读取多行:
line_number = 0
with open('E:/untitled/1.txt', 'r') as a_file:
for a_line in a_file:
line_number += 1
print('{:>4}{}'.format(line_number, a_line.rstrip()))
非文件来源的流对象:
只要对象包含read()方法,这个方法使用一个可选参数size并且返回值为一个串,它就是是流对象。
1.StringIO:
fromio importStringIO
f = StringIO()
f.write('Hello David')
print(f.getvalue())
______________________________________________________________
fromio importStringIO
f = StringIO('Hello\nDavid!')
while True:
s =f.readline()
if s== '':
break
print(s.strip())
2.BytesIO:
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
--------------------------------------------------------------
from io import BytesIO
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
print(f.read())
处理压缩文件:
Python标准库包含支持读写压缩文件的模块。有许多种不同的压缩方案;其中,gzip和bzip2是非Windows操作系统下最流行的两种压缩方式。gzip模块允许你创建用来读写gzip压缩文件的流对象。该流对象支持read()方法(如果你以读取模式打开)或者write()方法(如果你以写入模式打开)。这就意味着,你可以使用从普通文件那儿学到的技术来直接读写gzip压缩文件,而不需要创建临时文件来保存解压缩了的数据。作为额外的功能,它也支持with语句,所以当你完成了对gzip压缩文件的操作,Python可以为你自动关闭它。例:
importgzip
with gzip.open('out.log.gz',mode='wb')as z:
z.write('Hello David!'.encode('utf-8'))
标准输入/输出/错误流(stdin/stdout/stderr):
sys.stdout和sys.stderr都是流对象,但是他们都只支持写入。试图调用他们的read()方法会引发IOError异常。
importsys
# 任何类只要实现了__enter__和__exit__都叫做上下文管理器
class RedirectStdoutTo(object):
def __init__(self, out_new):
self.out_new= out_new
def __enter__(self):
self.out_old= sys.stdout
sys.stdout = self.out_new
def __exit__(self,*args):
sys.stdout =self.out_old
print('A')①
# with open('out.log', mode='w', encoding='utf-8') as afile, #RedirectStdoutTo(afile):②
with open('out.log',mode='w',encoding='utf-8')as afile:
with RedirectStdoutTo(afile):
print('B')③
print('C')④
① 这条代码会输出到ide的“交互式窗口(InteractiveWindow)”(或者终端,如果你从命令行运行这段脚本)。
② 这条with语句使用逗号分隔的上下文环境列表。这个列表就像一系列相互嵌套的with块。先列出的是“外层”的块;后列出的是“内层”的块。第一个上下文环境打开一个文件;第二个重定向sys.stdout到由第一个上下环境创建的流对象。
③ 由于这个print()函数在with语句创建的上下文环境里执行,所以它不会输出到屏幕;它会写入到文件out.log。
④ with语句块结束了。Python告诉每一个上下文管理器完成他们应该在离开上下文环境时应该做的事。这些上下文环境形成一个后进先出的栈。当离开一个上下文环境的时候,第二个上下文环境将sys.stdout的值恢复到它的原来状态,然后第一个上下文环境关闭那个叫做out.log的文件。由于标准输出已经被恢复到原来的状态,再次调用print()函数会马上输出到屏幕上。
重定向标准错误的原理跟这个完全一样,将sys.stdout
替换为sys.stderr
即可。
参考网址:
http://old.sebug.net/paper/books/dive-into-python3/files.html
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431917590955542f9ac5f5c1479faf787ff2b028ab47000
- Python –同步IO学习笔记
- 同步阻塞式IO(BIO)--学习笔记
- 【Python学习笔记】IO编程
- python学习笔记 IO编程
- python学习笔记6IO
- python学习笔记(九) - IO编程
- [2015.2.11] python学习笔记 IO编程
- Python之学习笔记(IO操作)
- python学习笔记(2)-IO编程
- Python学习笔记(七)IO编程
- Python IO编程——学习笔记
- Python Tutorial 学习笔记5 --IO
- 【Python学习笔记】IO编程:文件读写
- 【Python学习笔记】IO编程:序列化
- Python学习笔记——IO编程
- IO的学习笔记 - 同步,异步,阻塞,非阻塞
- IO学习笔记:阻塞 非阻塞 同步 异步
- 异步IO和同步IO概念学习
- 使用PHP操作从Web访问MySQL
- 第39讲项目1——完数(1)
- 求1到m的倒数和
- C比较两个字符串中的不同的字符串
- Webservice异步系统
- Python –同步IO学习笔记
- SpringMVC 函数返回值问题,返回Json解决方法
- 程序员也文艺~
- Android 手动显示和隐藏软键盘
- c++第2次上机-3
- 创建CloudStack
- 整数的划分
- ShareSDK第三方分享与登录遇到的问题
- Android 图片加载相关问题