數(shù)據(jù)存儲之json文件處理和csv文件處理

什么是json:

JSON(JavaScript Object Notation, JS 對象標(biāo)記) 是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript (w3c制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。更多解釋請見:https://baike.baidu.com/item/JSON/2462549?fr=aladdin

JSON支持?jǐn)?shù)據(jù)格式:

  1. 對象(字典)。使用花括號。
  2. 數(shù)組(列表)。使用方括號。
  3. 整形、浮點型、布爾類型還有null類型。
  4. 字符串類型(字符串必須要用雙引號,不能用單引號)。

多個數(shù)據(jù)之間使用逗號分開。
注意:json本質(zhì)上就是一個字符串。

字典和列表轉(zhuǎn)JSON:

import json

books = [
    {
        'title': '鋼鐵是怎樣練成的',
        'price': 9.8
    },
    {
        'title': '紅樓夢',
        'price': 9.9
    }
]

json_str = json.dumps(books,ensure_ascii=False)
print(json_str)

因為jsondump的時候,只能存放ascii的字符,因此會將中文進行轉(zhuǎn)義,這時候我們可以使用ensure_ascii=False關(guān)閉這個特性。
Python中。只有基本數(shù)據(jù)類型才能轉(zhuǎn)換成JSON格式的字符串。也即:int、float、str、list、dicttuple。

將json數(shù)據(jù)直接dump到文件中:

json模塊中除了dumps函數(shù),還有一個dump函數(shù),這個函數(shù)可以傳入一個文件指針,直接將字符串dump到文件中。示例代碼如下:

books = [
    {
        'title': '鋼鐵是怎樣練成的',
        'price': 9.8
    },
    {
        'title': '紅樓夢',
        'price': 9.9
    }
]
with open('a.json','w') as fp:
    json.dump(books,fp)

將一個json字符串load成Python對象:

json_str = '[{"title": "鋼鐵是怎樣練成的", "price": 9.8}, {"title": "紅樓夢", "price": 9.9}]'
books = json.loads(json_str,encoding='utf-8')
print(type(books))
print(books)

直接從文件中讀取json:

import json
with open('a.json','r',encoding='utf-8') as fp:
    json_str = json.load(fp)
    print(json_str)

csv文件處理

讀取csv文件:
import csv

with open('stock.csv','r') as fp:
    reader = csv.reader(fp)
    titles = next(reader)
    for x in reader:
        print(x)

這樣操作,以后獲取數(shù)據(jù)的時候,就要通過下表來獲取數(shù)據(jù)。如果想要在獲取數(shù)據(jù)的時候通過標(biāo)題來獲取。那么可以使用DictReader。示例代碼如下:

csv文件處理

讀取csv文件:

import csv

with open('stock.csv','r') as fp:
    reader = csv.reader(fp)
    titles = next(reader)
    for x in reader:
        print(x)

這樣操作,以后獲取數(shù)據(jù)的時候,就要通過下表來獲取數(shù)據(jù)。如果想要在獲取數(shù)據(jù)的時候通過標(biāo)題來獲取。那么可以使用DictReader。示例代碼如下:

import csv

with open('stock.csv','r') as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x['turnoverVol'])

寫入數(shù)據(jù)到csv文件:

寫入數(shù)據(jù)到csv文件,需要創(chuàng)建一個writer對象,主要用到兩個方法。一個是writerow,這個是寫入一行。一個是writerows,這個是寫入多行。示例代碼如下:

import csv

headers = ['name','age','classroom']
values = [
    ('zhiliao',18,'111'),
    ('wena',20,'222'),
    ('bbc',21,'111')
]
with open('test.csv','w',newline='') as fp:
    writer = csv.writer(fp)
    writer.writerow(headers)
    writer.writerows(values)

也可以使用字典的方式把數(shù)據(jù)寫入進去。這時候就需要使用DictWriter了。示例代碼如下:

import csv

headers = ['name','age','classroom']
values = [
    {"name":'wenn',"age":20,"classroom":'222'},
    {"name":'abc',"age":30,"classroom":'333'}
]
with open('test.csv','w',newline='') as fp:
    writer = csv.DictWriter(fp,headers)
    writer = csv.writeheader()
    writer.writerow({'name':'zhiliao',"age":18,"classroom":'111'})
    writer.writerows(values)

筆記

import csv

# 通過下標(biāo)讀取文件
# def read_csv_demo():
#     with open('', 'r') as fp:
#         # reader是一個迭代器
#         reader = csv.reader(fp)
#         # next 會對迭代器會從開始位置加一位
#         next(reader)
#         for x in reader:
#             name = [3]
#             other = [-1]
#             print({'name': name, 'other': other})


# 通過字典讀取文件
# def read_csv_demo2():
#     with open('', 'r') as fp:
#         # 使用DictReader創(chuàng)建的reader對象
#         # 不會包含的那行數(shù)據(jù)
#         reader = csv.DictReader(fp)
#         for x in reader:
#             value = {'name':x['name'],'other':x['other']}
#             print(value)


# 通過寫入文件
def read_csv_demo3():
    headers = ['username', 'age', 'height']

    values = [
        {'張三', '18', '156'},
        {'李四', '19', '184'},
        {'王五', '20', '168'}
    ]

    # newline 是寫入一行后做的事
    with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:
        writer = csv.writer(fp)
        # 寫入表頭
        writer.writerow(headers)
        # 寫入數(shù)據(jù)
        writer.writerows(values)


# 通過字典寫入文件
def read_csv_demo4():
    headers = ['username', 'age', 'height']

    values = [
        {'username':'張三', 'age':18, 'height':156},
        {'username':'李四', 'age':19, 'height':184},
        {'username':'王五', 'age':20, 'height':168}
    ]
    # newline 是寫入一行后做的事
    with open('classroom2.csv', 'w', encoding='utf-8', newline='') as fp:
        writer = csv.DictWriter(fp,headers)
        # 寫入表頭數(shù)據(jù)的時候,需要執(zhí)行writeheader函數(shù)
        writer.writeheader()
        writer.writerows(values)


if __name__ == '__main__':
    read_csv_demo4()

上一篇:數(shù)據(jù)解析之正則表達式和re模塊
下一篇:數(shù)據(jù)存儲之使用mysql數(shù)據(jù)庫存儲數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容