什么是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ù)格式:
- 對象(字典)。使用花括號。
- 數(shù)組(列表)。使用方括號。
- 整形、浮點型、布爾類型還有null類型。
- 字符串類型(字符串必須要用雙引號,不能用單引號)。
多個數(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)
因為json在dump的時候,只能存放ascii的字符,因此會將中文進行轉(zhuǎn)義,這時候我們可以使用ensure_ascii=False關(guān)閉這個特性。
在Python中。只有基本數(shù)據(jù)類型才能轉(zhuǎn)換成JSON格式的字符串。也即:int、float、str、list、dict、tuple。
將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ù)