计算机的Input 和Output ,以及stream data , 如果数据从外部(网络等),写入本机磁盘当中的话,这个叫做Input, 而我们发送数据到互联网上去的话,这个叫做OUtput
但是,话是这么说, 但是cpu的运行的速度远远高于我们数据写入写出的速度,所以,那么I/O 也就有两种方式,同步和异步 , 这个概念很简单,同步就是我在I/O的过过程种,CPU是一直处在一个等待的状态,不能进行其他的程序。 而异步则是不一样了,这个时候,我就告诉你,你把数据给我发出去,然后我就走了干别的事情,如果你干完了的话,再来找我吧。
1、文件读写
(1) 方式一
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
(2)方式二 : With 函数
#这种方式和方式一是一样的,但是我们不需要调用fclose 函数了,这样很方便
with open('/path/to/file', 'r') as f:
print(f.read())
#同时,如果我们要读的文件突然一下很大, 这个时候我建议使用
read(size)
#如果我们要读取的是配置文件的话,我们就最好使用readline文件,最方便了呢
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉
(3) file-like Object 下面有几个概念
二进制文件:
f = open('/Users/michael/test.jpg', 'rb')
字符编码问题:
扫描二维码关注公众号,回复:
2934744 查看本文章
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
#如何忽略哪些不同的编码错误呢?
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
写文件:
f = open('/Users/michael/test.txt', 'w')
f.write('Hello, world!')
#就像 我们之前说的异步的事情,如果我们步调用fclose 函数的话, 这个时候,我们就会出现数据可能没有写##完的情况,所以为了避免这种情况的发生,我们就采用with的方式的吧
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
2、StringIO和BytesIO
很多时候,数据读写不一定是文件,也可以在内存中读写,在内存中读写
from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world!')
print(f.getvalue())
如果 要读取内存当中的数据,这个时候,我们可以写下面的代码对这个数据进行读写的:
f = StringIO('Hello!\nHi!\nGoodbye!')
while True:
s = f.readline()
if s == '':
break
print(s.strip())
对于BytesIO 这里就不废话了,直接粘贴廖大神的内容:
3、操作文件和目录
import os
os.name
这个返回的是OS 的名字
(1)环境变量
os.environ #查看所有的环境变量
os.environ.get('PATH') #获得具体某个变量的环境变量的值
(2)操作文件和目录
os.path.abspath('.') #查看绝对路径
os.path.join('/Users/michael', 'testdir') #创建新的目录
os.mkdir('/Users/michael/testdir') #删掉一个目录
PS,关于这个地方,现在还是记不住,但是,不过,要还是知道这个模块大体是干嘛用的哇
4、序列化
我认为,序列化,就看作一种 Ouput必须要进行的一步就好了,而反序列化刚好是相反的过程。 就为了更好的优化整个的传输的过程。
(1)下面我们首先举一个例子的吧:
就像上面所示的样子,我们,dumps 的作用就是将任意对象序列化成为byte 这样的话,我们就可以将它写入文件了。
(2)JSON
json 哈 请参考上面的吧,廖大神的内容。。