Python操作JSON和CSV

版权声明:本文为 [onefine] 原创文章,转载请注明出处: https://blog.csdn.net/jiduochou963/article/details/87886421

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文件发现一切正常:

扫描二维码关注公众号,回复: 5284365 查看本文章
[{"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

猜你喜欢

转载自blog.csdn.net/jiduochou963/article/details/87886421
今日推荐