資料儲存——json、CSV
json
JSON(JavaScript Object Notation,JS物件標記)是一種輕重量級的資料交換。它是基於ECMAScript(w3c制定的js規範)的
一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得JSON成為理想的資料交換語言。
易於人閱讀和編寫,同時也易於機器的解析和生成,並有效地提升網路傳輸效率。
JSON支援資料格式:
1. 物件(字典):使用花括號{};
2. 陣列(列表):使用方括號[];
3 . 整形、浮點型、布林型別還有null型別;
4. 字串型別(字串必須使用雙引號,不能使用單引號)。
多個數據之間使用逗號分開。json本質上就是一個字串。(https://www.json.cn校驗json的格式是否正確
)
字典和列表轉JSON
將python物件dumps為json字串
import json persons = [ { 'username':'zhangsan', 'age':18, 'cpuntry':'China' }, { 'username': 'lisi', 'age': 20, 'cpuntry': 'China' } ] json_str = json.dumps(persons) print(type(json_str)) print(json_str)""" 輸出結果: <class 'str'> [{"username": "zhangsan", "age": 18, "cpuntry": "China"}, {"username": "lisi", "age": 20, "cpuntry": "China"}] """
在python中,只有基本資料型別才能轉換成JSON格式的字串。即:int、float、 str、 list、 dic、t tuple。
將python物件dump到檔案中
persons = [ { 'username':'張三', 'age':18,'cpuntry':'China' }, { 'username': '李四', 'age': 20, 'cpuntry': 'China' } ] with open('persion.json','w',encoding='utf-8') as fp: json.dump(persons,fp,ensure_ascii=False)
json 在 dump 的時候,只能存放 ascil 的字元,因此會將中文進行轉義,可以使用 ensure_ascii=False 關閉這個特性。(不指定編碼形式會出現亂碼)
從檔案中讀取json:
with open('persion.json','r',encoding='utf-8') as fp: json_str = json.load(fp) print(json_str)
CSV
‘CSV’並不是一種單一的、定義明確的格式。“CSV”泛指具有以下特徵的任何檔案:
1.純文字。使用某個字符集,比如:ASCII、Uniconde、EBCDIC或GB2312等;
2. 有記錄組成(每一行都是一條記錄);
3. 每條記錄被分隔符分隔為欄位(典型分隔符有逗號、分號或製表符;有時候分隔符可以包括可選的空格);
4. 每條記錄都有同樣的欄位序列。
讀取CSV檔案:
reader()
import csv with open('stock.csv','r') as fp: reader = csv.reader(fp) next(reader) # 表頭 for x in reader: name = x[3] volumn = x[-1] print({'name':name,'volumn':volumn})
reader()讀取資料時,要通過下標獲取資料。如果要通過標題獲取資料,那麼使用DictReader。
with open('stock.csv','r') as fp: reader = csv.DictReader(fp) """ 使用DictReader建立的reader物件,不包括標題行的資料。reader是一個迭代器,遍歷這個迭代器返回的是一個字典 """ for x in reader: value= {'name':x['secshortName'], 'volumn':x['turnoverVol']} print(value)
寫入資料到CSV檔案
writer有兩種方法:一個是writerow,寫入一行;一個是writerows,多行寫入。
headers = ['name', 'age', 'classroom'] values = [ ('zhangsan', 18, '111'), ('lisi', 20, '112'), ('wangwu', 21, '113') ] with open('calssinfo.csv','w',newline='') as fp: writer = csv.writer(fp) writer.writerow(headers) writer.writerows(values)
也可以使用字典的方式把資料寫入進去,這時候使用DictWriter。(字典的鍵要與標頭保持一樣)
headers = ['name', 'age', 'country'] values = [ { 'name':'張三', 'age':18, 'country':'China' }, { 'name': 'lisi', 'age': 20, 'country': 'China' } ] with open('calssinfo.csv','w',encoding='utf-8',newline='') as fp: writer = csv.DictWriter(fp,headers)
# 寫入表頭資料的時候,需要呼叫writeheader() writer.writeheader() writer.writerows(values)