# 數據讀寫不一定是文件,也可以在內存中讀寫 # 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'\xe6\x88\x91\xe6\x98\xaf\xe8\xb0\x81' 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'\x80\x03}q\x00(X\x02\x00\x00\x00aaq\x01KoX\x02\x00\x00\x00bbq\x02M\xae\x08u.' # 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))))