Day 21:Python 多執行緒和協程
阿新 • • 發佈:2021-07-11
結構化資料型別
關係型資料庫結構化儲存
json、html等半結構化資料
圖片音訊資料等非結構化資料
Python處理csv檔案
csv是一個被行分隔符、列分隔符劃分成行和列的文字檔案
行分隔符為\r\n,最後一行沒有換行符
列分隔符通常為逗號或製表符
import csv line1 = [1,"zhangsan",25] line2 = [2,"zhangsan",23] with open('./test.csv', 'w+', newline='') as csv_file: write = csv.writer(csv_file) # 建立csv物件 write.writerow(line1) # 寫入操作 write.writerow(line2)
Python處理ini檔案
ini檔案,作為配置檔案
'''
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
'''
中括號裡面的部分稱為section
每個section內,都是keyvalue形成的鍵值對,key稱為option選項
對於ini檔案解析,python提供了專門的模組configparser
from configparser import ConfigParser cfg = ConfigParser() cfg.read('./my.cnf') print(cfg.sections()) # 遍歷獲取sections for section in cfg.sections(): # 通過section獲取options for k in cfg.options(section): print(section, k) # 遍歷獲取sections for section in cfg.sections(): # 通過section獲取options和values for k, v in cfg.items(section): print(k, v) # 獲取指定options的str值 a = cfg.get('test', 'port') print(a, type(a)) # 獲取指定options的int型別值 a = cfg.getint('test', 'port') print(a, type(a)) # 判斷是否存在指定options print(cfg.has_option('test', 'server_name')) # 檢查是否存在test的section if not cfg.has_section('test'): # 新增test section cfg.add_section('test') # 在test中新增名稱為port的options cfg.set('test', 'port', '80') cfg.set('test', 'port2', '8080') # 刪除指定options cfg.remove_option('test', 'port2') # 持久化至檔案,所有針對ini的寫入操作,都需要進行持久化操作 with open('./my.cnf', 'w') as f: cfg.write(f)
序列化和反序列化
serialization 序列化
將記憶體中物件儲存下來,變成一個個位元組
desserialization 反序列化
將檔案的一個個位元組回覆稱記憶體中的物件
序列化儲存到檔案就是持久化,可以將資料序列化後持久化、網路傳輸
python處理Json檔案
-
json的資料型別
雙引號引起來的字串,數值,true和false,null,物件,陣列。
-
Python中json模組
Python型別 json型別 True true False false None null str string int integer float float list array dict object -
常用方法:
指令 說明 dumps 序列化,json編碼(字典轉json) dump 序列化,json編碼並存入檔案 loads 反序列化,json解碼(json轉字典) load 反序列化,json解碼,從檔案中讀取資料 import json d = {'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None} print(d) print(json.dumps(d)) {'a': 123, 'b': [1, 2, 3, {'c': 456}], 'd': True, 'e': None} {"a": 123, "b": [1, 2, 3, {"c": 456}], "d": true, "e": null}
一般json編碼的資料很少落地,資料都是通過網路傳輸。
-
messagePack:一個基於二進位制高效的物件序列化類庫,可以像json一樣,在許多語言中交換結構物件,同時支援壓縮
# 安裝
pip install msgpack-python
# 使用方法
packb 序列化物件,提供了dumps來相容
unpackb 反序列化物件,提供了loads來相容
shutil模組
python提供了一個方便的高階檔案操作的庫
import shutil
# 檔案物件的複製,fsrc直接呼叫read方法,fdst直接呼叫write方法,因此需要特別注意原檔案指標和目標檔案是夠可寫。length制定了buffer大小
copyfileobj(fsrc, fdst[, length])
In [4]: shutil.copyfileobj('sftp-password.txt', 'sftp-password1.txt')
# 複製檔案內容,不包含元資料,src和dst為檔案的路徑字串
copyfile(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copyfile('sftp-password.txt', 'sftp-password1.txt')
# 僅僅複製許可權,要求src和dst必須存在
copymode(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copymode('sftp-password.txt', 'sftp-password1.txt')
# 複製檔案元資料資訊,包含許可權,但不包含檔案屬主
copystat(src, dst,* ,follow_symlinks=True)
In [4]: shutil.copystat('sftp-password.txt', 'sftp-password1.txt')
# 複製檔案內容、許可權、部分元資料資訊,不包括建立時間和修改時間
copy(src, dst,* ,follow_symlinks=True)
In [6]: shutil.copy('sftp-password.txt', 'test01.txt')
# 複製目錄,src,dst必須為目錄,src必須存在,dst必須不存在
copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
# 刪除檔案,遞迴刪除
rmtree(path, ignore_errors=False, onerror=None)
# 移動檔案
move(src, dst, copy_function=copy2)