# 数据读写不一定是文件,也可以在内存中读写 # StringIO就是在内存中读写str from io import StringIO f = StringIO() # 要把str写入StringIO,我们需要先创建一个StringIO f.write('leyi') print(f.getvalue()) # getvalue()方法用于获得写入后的str from io import StringIO f = StringIO('hello world!') s = f.readlines() print(s) # ['hello world!'] # BytesIO # StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO # BytesIO实现了在内存中读写bytes,我们创建一个BytesIO,然后写入一些bytes from io import BytesIO f = BytesIO() f.write('我是谁'.encode('utf-8')) print(f.getvalue()) # b'xe6x88x91xe6x98xafxe8xb0x81' print(f.getbuffer()) # <memory at 0x1089aaa10> import os print(os.name) # posix print(os.environ) # 查看环境变量 print(os.environ.get('PYCHARM_DISPLAY_PORT')) print(os.path.abspath('.')) # 查看当前目录的绝对路径 # os.mkdir(os.path.join(os.path.abspath('.'), 'test')) # 在当前目录创建一个目录 print(os.path.join('./111/222/333', '444.txt')) # 拼接路径 ./111/222/333/444.txt print(os.path.split('./111/222/333.txt')) # 拆分路径 ('./111/222', '333.txt') print(os.path.splitext('./xxx/xxx/xx.txt')) # 根据扩展名进行拆分 ('./xxx/xxx/xx', '.txt') os.rename('xxx.txt', 'yyy.txt') # 重命名文件 os.remove('xxx.txt') # 删除文件 # 查找当前目录所有的txt文件 import os for x in os.listdir('.') : if (os.path.isfile(x) and os.path.splitext(x)[1] == '.txt'): print(x) # 查找当前目录所有的目录 for x in os.listdir('.') : if (os.path.isdir(x)): print(x) # 把变量从内存中变成可存储或传输的过程称之为序列化 import pickle d = {'aa' : 111, 'bb': 2222} print(pickle.dumps(d)) # b'x80x03}qx00(Xx02x00x00x00aaqx01KoXx02x00x00x00bbqx02Mxaex08u.' # pickle.dumps()方法把任意对象序列化成一个bytes # pickle.dump()直接把对象序列化后写入一个file-like Object import pickle d = {'aa' : 111, 'bb': 2222} print(pickle.dumps(d)) bb = pickle.dumps(d) print(pickle.loads(bb)) with open('./b.txt', 'wb') as f: pickle.dump(d, f) with open('./b.txt', 'rb') as f2: print(pickle.load(f2)) JSON和Python内置的数据类型对比:  import json d = {'aa': 111, 'bb': 222} d2 = dict(aa = 111, bb = 222) print(type(json.dumps(d))) print(type(json.dumps(d2))) print(type(json.loads(json.dumps(d)))) print(type(json.loads(json.dumps(d2))))