Python操作JSON和CSV


JSON

JSON(JavaScript Object Notation, JS 對象標記)是一種輕量級的數據交換格式,易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網絡傳輸效率。
它基於ECMAScript(w3c制定的js規范)的一個子集,采用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得JSON成為理想的數據交換語言。

JSON支持數據格式:

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

多個數據之間使用逗號分開。注:json本質上就是一個字符串。

JSON函數

使用JSON函數需要導入json庫:import json

函數 描述
json.dumps 將Python對象編碼成JSON字符串
json.loads 將已編碼的JSON字符串解碼為Python對象

另外:
json.dump()json.load()主要用來讀寫json文件函數。

字典和列表轉JSON

import json

books = [
    {
        'title': 'Python基礎',
        'price': '79.00'
    },
    {
        'title': 'Scrapy網絡爬蟲',
        'price': '56.00'
    }
]

json_str = json.dumps(books)
print('type: ', type(json_str))
print('json_str: ', json_str)
# 輸出:
type:  <class 'str'>
json_str:  [{"title": "Python\u57fa\u7840", "price": "79.00"}, {"title": "Scrapy\u7f51\u7edc\u722c\u866b", "price": "56.00"}]

注:因為json在dump的時候,只能存放ASCII的字符,因此會將中文進行轉義,這時候我們可以使用ensure_ascii=False關閉這個特性。

更改之后:

json_str = json.dumps(books, ensure_ascii=False)
# 輸出:
[{"title": "Python基礎", "price": "79.00"}, {"title": "Scrapy網絡爬蟲", "price": "56.00"}]

注:Python中,只有基本數據類型才能轉換成JSON格式的字符串,即:intfloatstrlistdicttuple

將json數據直接dump到文件中

常規方式:

import json

books = [
    {
        'title': 'Python基礎',
        'price': '79.00'
    },
    {
        'title': 'Scrapy網絡爬蟲',
        'price': '56.00'
    }
]

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

with open('books.json', 'w') as fp:
    fp.write(json_str)

打開books.json文件發現出現了亂碼:

[{"title": "Python����", "price": "79.00"}, {"title": "Scrapy��������", "price": "56.00"}]

然后指定文件編碼方式:

with open('books.json', 'w', encoding='utf8') as fp:
    fp.write(json_str)

重新打開books.json文件發現一切正常:

[{"title": "Python基礎", "price": "79.00"}, {"title": "Scrapy網絡爬蟲", "price": "56.00"}]

json模塊中除了dumps函數,還有一個dump函數,這個函數可以傳入一個文件指針,直接將字符串dump到文件中。

import json

books = [
    {
        'title': 'Python基礎',
        'price': '79.00'
    },
    {
        'title': 'Scrapy網絡爬蟲',
        'price': '56.00'
    }
]


with open('books.json', 'w', encoding='utf8') as fp:
    json.dump(books, fp)
# 輸出:
[{"title": "Python\u57fa\u7840", "price": "79.00"}, {"title": "Scrapy\u7f51\u7edc\u722c\u866b", "price": "56.00"}]

關閉中文轉義:

with open('books.json', 'w', encoding='utf8') as fp:
    json.dump(books, fp, ensure_ascii=False)
# 輸出:
[{"title": "Python基礎", "price": "79.00"}, {"title": "Scrapy網絡爬蟲", "price": "56.00"}]

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

import json

json_str = '[{"title": "Python基礎", "price": "79.00"}, {"title": "Scrapy網絡爬蟲", "price": "56.00"}]'
books = json.loads(json_str)

print('type: ', type(books))
print('boos: ', books)
# 輸出:
type:  <class 'list'>
boos:  [{'title': 'Python基礎', 'price': '79.00'}, {'title': 'Scrapy網絡爬蟲', 'price': '56.00'}]

直接從文件中讀取json:

import json

# 注意指定文件編碼方式
with open('books.json', 'r', encoding='utf8') as fp:
    json_str = json.load(fp)
    print(json_str)

# 輸出:
[{'title': 'Python基礎', 'price': '79.00'}, {'title': 'Scrapy網絡爬蟲', 'price': '56.00'}]

csv文件處理

讀取csv文件

import csv

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

這樣操作,以后獲取數據的時候,就要通過下表來獲取數據。如果想要在獲取數據的時候通過標題來獲取。那么可以使用DictReader:

import csv

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

寫入數據到csv文件

寫入數據到csv文件,需要創建一個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)

也可以使用字典的方式把數據寫入進去。這時候就需要使用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)

參考:
Python JSON: http://www.runoob.com/python/python-json.html
python中json文件處理涉及的四個函數json.dumps()和json.loads()、json.dump()和json.load()的區分: https://www.cnblogs.com/xiaomingzaixian/p/7286793.html


免責聲明!

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



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