Python操作JSON和CSV

枫铃3年前 (2021-10-03)Python267

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)

相关文章

Python教程:lambda,filter,map的运用

1、在学完定义函数def后,又接触了个新的知识,lambda,这个简直可以替代定义函数def啊。用它时,不需要一堆命...

Python如何实现单例模式?其他23中设计模式python如何实现?

单例模式主要有四种方法:new、共享属性、装饰器、import。 # __ new__方法: class Singleton(...

Python的字符串

对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符: &...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。