json和csv文件存儲


 

一. json

1:基本概念

1.1 Json和Javascript

JSON, 全稱JavaScript Object Notation,它通過對象和數組的組合來表示數據。在JavaScript中一切都是對象,因此,任何支持的類型都可以通過JSON來表示,常用的類型有數據和對象。

JavaScript中,對象用{},例如{key1:value1, key2:value2...},數組用[],例如["jack", "hong",...]

一個JSON對象可以寫成如下,[]和{}可自由嵌套組合

[{
        "name": "bob",
        "gender": "male",
        "birthday": "1992-10-18"
},{
        "name": "john",
        "gender": "female",
        "birthday": "1995-10-18"
}]

 

1.2 json對象和python中字典的區別

相同點:兩者在寫法上是一樣的

不同點:

1)字典是一種數據結構,json是一種格式;

2)字典有很多內置函數,有多種調用方法,而json是數據打包的一種格式,並不像字典具備操作性

3)json是格式就會有一些形式上的限制,比如json的格式要求必須且只能使用雙引號作為key或者值的邊界符號,不能使用單引號,但字典就無所謂了

 

python提供了json模塊,可以方便的把json格式的字符串轉化為python的數據結構

 

2. 調用json.loads()將json文本字符串轉為python中的數據結構

2. 1 基本例子

import json

# 三個引號也是字符串 str
= ''' [{ "name": "bob", "gender": "male", "birthday": "1992-10-18" },{ "name": "john", "gender": "female", "birthday": "1995-10-18" }] ''' print(type(str)) data = json.loads(str) print(data) print(type(data))

輸出如下

<class 'str'>
[{'gender': 'male', 'name': 'bob', 'birthday': '1992-10-18'}, {'gender': 'female', 'name': 'john', 'birthday': '1995-10-18'}]
<class 'list'>

 

這里使用loads()方法將json字符串轉化python列表,那么可用索引獲得相應值

data[0]['name']

data[0].get('name')  #字典都可以用get()方法來獲取相應的值

結果都是 bob,但推薦使用第二種;因為使用get()方法,即使鍵名不存在,也不會報錯,而是返回None,如下

data[0].get('age')
data[0].get('age', 25)

#輸出如下
None
25  #key不存在時,返回默認值

 

注意:

變量str中的數據需要用雙引號來包着,不能用單引號,否則會報錯

 

 2.2  從文件中讀取字符串內容,再用loads()轉化為列表

比如還用上面變量str中的字符串,文件名為data.json

import json

with open('data.json', 'r') as file:
    str = file.read()
    data = json.loads(str)
    print(data)

 

 

3. 調用json.dumps()

3.1 用dumps()方法將列表轉化為字符串,再用write()方法寫入文本

import json

data = [{
        'name' : 'bob',
        'gender': 'male',
        'birthday': '1992-10-19'
}]

with open('data.json', 'w') as file:
    file.write(json.dumps(data))

data.json的文本內容為:[{"name": "bob", "gender": "male", "birthday": "1992-10-19"}]

 

3.2  如果想保存JSON格式,可以加一個參數indent,代表縮進字符個數

with open('data.json', 'w') as file:
    file.write(json.dumps(data, indent=2))

得到的data.json文本內容為

[
  {
    "name": "bob",
    "gender": "male",
    "birthday": "1992-10-19"
  }
]

 

3.3. 有中文的情況下,需要指定ensure_ascii為False, 並且規定文件輸出的編碼

with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(data, indent=2, ensure_ascii=False))

 

 

 

 

二.  csv文件存儲

 

1. 一個最簡單的例子

import csv

with open('data.csv', 'w') as csvfile:
    write = csv.writer(csvfile)

    write.writerow(['id','name','age'])
    write.writerow(['10001','Mike',20])
    write.writerow(['10002','bob',22])
    write.writerow(['10003','hong',21])

 

1.1 分析

1). 打開data.csv文件,然后指定打開的模式為寫入'w',獲得文件句柄csvfile;

2). 調用csv的writer()方法初始化寫入對象,傳入該句柄

3). 調用writerow()方法傳入每行的數據

運行后得到一個data.csv文件,內容如下,並且可直接用excel標准形式打開

id,name,age
10001,Mike,20
10002,bob,22
10003,hong,21

 

1.2. 如果想要修改列與列之間的分隔符為空格,只需要在csv.writer()中傳入delimiter參數

writer = csv.writer(csvfile, delimiter= ' ')

 

1.3. 可調用writerows()方法同時寫入多行,此時參數需要為二維列表

writer.writerows([['10001', 'Mike', 20], ['10002', 'Bob', 22], ['10003', 'hong', 21]])

 

 

2. csv也提供了字典的寫入方式

import csv

with open('data1.csv', 'w') as csvfile:
    fieldnames = ['id', 'name', 'age']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20})
    writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22})
    writer.writerow({'id': '10003', 'name': 'Hong', 'age': 21})

 

2.1 分析下

1)先定義三個字段,用fieldnames表示,然后將其作為參數傳給DictWriter來初始化一個字典

2)調用writeheader()方法先寫入頭信息

3)調用writerow()方法傳入相應字典

 

2.2  寫入中文

只需要修改一行

with open(data1.csv, 'w', encoding='utf-8') as csvfile:

 

 

3. 讀取

import csv

with open('data.csv', 'r', encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM