python的IO操作(并行/并发、同步/异步、阻塞/非阻塞、StringIO&BytesIO、序列化和反序列化、JSON)

IO(Input/Output)输入和输出, IO编程中,Stream(流)是⼀个很重要的概念,可以把流想象成⼀个水管, 数据就是水管里的水。Input Stream就是数据从外面 (磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。

1、并行与并发

并发(concurrency):在一个时间段内有几个程序都处于已启动运行到运行完毕之间 ,且这几个程序都是在同一个处理机上运行,但任一时刻只能一个程序在处理机上运行。

并行(parallelism):当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互相不抢占CPU资源,可以同时进行,这种方式称为并行

 

2、同步与异步、阻塞与非阻塞

参考:http://www.cnblogs.com/albert1017/p/3914149.html 

           https://blog.51cto.com/yaocoder/1308899

最简单的话理解:同步是两个对象之间的关系,而阻塞是一个对象的状态

网上关于这方面介绍的文章太多了,但自己看的大都是糊里糊涂的,上面提到的文章感觉介绍的很清晰

import sys
x = sys.stdin.readline()
print(x)
x = input('input a number:') #先把提示信息输出,然后捕获输入
print(x)

sys.stdout.write('io output-1')
sys.stdout.write('io output-2')

print('io output-1')#追加了一个换行符
print('io output-2')


输出结果:
1  --输入
1

input a number:2  --输入
2
io output-1io output-2io output-1
io output-2

3、SringIO&BytesIO  基于内存的IO模式

from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world')
print(f.getvalue()) #StringIO经常被用来作字符串的缓存

print('-------'*10)
f = StringIO('Hello!\nHi\nGoodbye!')
while True:
    s = f.readline()
    if s == '':
        break
    print(s.strip())

print('-------'*10)
s = StringIO('ABCDEF')
s.write('abc') #从开头写,将会覆盖ABC
s.seek(0)
print(s.read())
s.seek(2)
print(s.read())

输出结果:
hello world
----------------------------------------------------------------------
Hello!
Hi
Goodbye!
----------------------------------------------------------------------
abcDEF
cDEF
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())

f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
x = f.read()
print(x.decode('utf-8'))


输出结果:
b'\xe4\xb8\xad\xe6\x96\x87'
中文

4、序列化和反序列化

序列化:变量从内存中变成可存储或者传输的过程称之序列化(pickling)

反序列化:把变量内容从序列化的对象重新读到内存里称之反序列化

优点:便于存储、便于传输

import pickle

def func():
    print('hello tomorrow')

info = {'name':'lzy','age':29,'hobby':func}
f = open('a1.txt','wb')
f.write(pickle.dumps(info))

f = open('a1.txt','rb')
data = pickle.loads(f.read())
data['hobby']()

输出:
hello tomorrow

5、JSON

json.dumps(): 对数据进行编码

json.loads(): 对数据进行解码

import json
info = {'name':'lzy','age':22}
f = open('a1.txt','w',encoding='utf-8')
f.write(json.dumps(info))
f.close()

f = open('a1.txt','r',encoding='utf-8')
data = json.loads(f.readline())
print(data['age'])
f.close()

输出:
22

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值