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格式的字符串,即:int、float、str、list、dict、tuple。
将json数据直接dump到文件中
常规方式:
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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对象
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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,这个是写入多行:
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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)