1. 程式人生 > 實用技巧 >資料儲存——json、CSV

資料儲存——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)