一. 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(['','Mike',])
write.writerow(['','bob',])
write.writerow(['','hong',])

1.1 分析

1). 打开data.csv文件,然后指定打开的模式为写入'w',获得文件句柄csvfile;

2). 调用csv的writer()方法初始化写入对象,传入该句柄

3). 调用writerow()方法传入每行的数据

运行后得到一个data.csv文件,内容如下,并且可直接用excel标准形式打开

id,name,age
,Mike,
,bob,
,hong,

1.2. 如果想要修改列与列之间的分隔符为空格,只需要在csv.writer()中传入delimiter参数

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

1.3. 可调用writerows()方法同时写入多行,此时参数需要为二维列表

writer.writerows([['', 'Mike', ], ['', 'Bob', ], ['', 'hong', ]])

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': '', 'name': 'Mike', 'age': })
writer.writerow({'id': '', 'name': 'Bob', 'age': })
writer.writerow({'id': '', 'name': 'Hong', 'age': })

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)

json和csv文件存储的更多相关文章

  1. Python3编写网络爬虫10-数据存储方式三-CSV文件存储

    3.CSV文件存储 CSV 全称 Comma-Separated Values 中文叫做逗号分隔值或者字符分隔值,文件以纯文本形式存储表格数据.文件是一个字符序列 可以由任意数目的记录组成相当于一个结 ...

  2. 爬虫存储介质之CSV文件存储

    本文章来自度娘 CSV文件存储 CSV,全称为Comma-Separated Values,中文可以叫做逗号分隔值或字符分隔值,其文件以纯文本形式 存储表格数据.该文件是一个字符序列,可以由任意数目的 ...

  3. 使用 CSV 文件存储

    将爬取到的数据以 CSV 文件形式存储: import csv import requests req = requests.get("http://www.baidu.com/" ...

  4. 爬虫文件存储:txt文档,json文件,csv文件

    5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...

  5. Python常用的数据文件存储的4种格式(txt/json/csv/excel)及操作Excel相关的第三方库(xlrd/xlwt/pandas/openpyxl)(2021最新版)

    序言:保存数据的方式各种各样,最简单的方式是直接保存为文本文件,如TXT.JSON.CSV等,除此之外Excel也是现在比较流行的存储格式,通过这篇文章你也将掌握通过一些第三方库(xlrd/xlwt/ ...

  6. (完整)爬取数据存储之TXT、JSON、CSV存储

    一.文件存储 1. TXT文本存储 例:知乎发现页面,获得数据存成TXT文本 import requests from pyquery import PyQuery as pq url="h ...

  7. Python3爬虫(八) 数据存储之TXT、JSON、CSV

    Infi-chu: http://www.cnblogs.com/Infi-chu/ TXT文本存储 TXT文本存储,方便,简单,几乎适用于任何平台.但是不利于检索. 1.举例: 使用requests ...

  8. Go Web:数据存储(2)——CSV文件

    存储到CSV文件中 1.内存存储 2.CSV文件存储 3.gob序列化存储 本文接上一篇:内存存储. 关于CSV文件的说明,见csv文件格式 当数据存储到了内存中,可以在需要的时候持久化保存到磁盘文件 ...

  9. Python中如何将数据存储为json格式的文件

    一.基于json模块的存储.读取数据 names_writer.py import json names = ['joker','joe','nacy','timi'] filename='names ...

随机推荐

  1. testng的xml文件说明(TestNG DTD)

    testNG启发自JUnit和NUnit的一种测试框架,通过使用testNG使的测试更简单.,比如如下的一些特点: 1.通过注释来管理测试 2.多线程并发执行测试,且是安全的 3.支持数据驱动测试 4 ...

  2. linux 安装php7 Nginx

    这里 记录下 本屌安装linux  下安装php7 即遇到的问题. wget http://cn2.php.NET/distributions/php-7.0.4.tar.gz tar zxvf ph ...

  3. leetcode 1 A+B problems

    描述: 给个数组和整数t,一串整数中,存在两个数其和等于t,求这两个数的索引. 解决: 想要快,用个哈希储存曾经出现过的数的索引. vector<int> twoSum(vector< ...

  4. Git忽略规则及.gitignore规则不生效的解决办法(转)

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: # 此为注 ...

  5. How to use Qt Designed Ui file

    Ui Designed file In Working, we can use Qt Designer to designe UI; Then, use uic -o head.h designe.u ...

  6. Ubuntu下U盘只读文件系统,图标上锁,提示无法修改

    资料来源于网络,自己总结 问题 Ubuntu下有时候插入U盘,发现不能修改其中的内容.例如不能新建文件和文件夹,不能向U盘中复制文件等,系统提示:只读文件系统. 原因大概是U盘的文件系统信息出错(保存 ...

  7. PHP逻辑运算符中的and和&&以及or和||是有区别的

    下图是PHP的逻辑运算符: 看图中and和&&都是“与”,而or和||都是“或”,初开起来没有区别,但实际上这里面有一个优先级别的区别,即: &&和||的优先级别要高于 ...

  8. 【记录】CentOS7安装NODEBB

    NodeBB介绍: NodeBB 是一个更好的论坛平台,专门为现代网络打造.它是免费的,易于使用. NodeBB 论坛软件是基于 Node.js开发,支持 Redis 或 MongoDB 的数据库.它 ...

  9. nodename nor servname provided, or not known

    mac来使用redis然后产生上述错误,据说是用户名的问题 解决: 打开终端: cat /private/etc/hosts sudo vi /private/etc/hosts 将错误的那个名字加入 ...

  10. HDU 3157 Crazy Circuits (有源汇上下界最小流)

    题意:一个电路板,上面有N个接线柱(标号1~N)   还有两个电源接线柱  +  - 然后是 给出M个部件正负极的接线柱和最小电流,求一个可以让所有部件正常工作的总电流. 析:这是一个有源汇有上下界的 ...