json字符串介绍
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 语法规则
JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名;JSON是一个序列化的对象或数组。
- 六个构造字符:
begin-array = ws %x5B ws ; [ 左方括号
begin-object = ws %x7B ws ; { 左大括号
end-array = ws %x5D ws ; ] 右方括号
end-object = ws %x7D ws ; } 右大括号
name-separator = ws %x3A ws ; : 冒号
value-separator = ws %x2C ws ; , 逗号 - 在这六个构造字符的前或后允许存在无意义的空白符(ws):
ws = *(%x20 /; 空间
%x09 /; 水平标签
%x0A /; 换行或换行
%x0D); 回程
将python对象转化为json字符串
import json
# 将python对象转化为json字符串
persons =[
{
'username': 'zhiliao',
'age': 18,
'country': "china"
},
{
'username': '张三',
'age': 20,
'country': "china"
}
]
# json_str = json.dumps(persons)
# print(type(json_str))
# print(json_str)
# 将json字符串存储到文件当中
# json_str = json.dumps(persons)
with open('json.json', 'w', encoding='utf-8') as f:
# f.write(json_str)
json.dump(persons, f, ensure_ascii=False)
将json字符串load程python对象
import json
# json_str = '[{"username": "zhiliao", "age": 18, "country": "china"}, ' \
# '{"username": "张三", "age": 20, "country": "china"}]'
#
# persons = json.loads(json_str)
# print(type(persons))
# for person in persons:
# print(person)
#
with open('json.json', 'r', encoding='utf-8')as f:
persons = json.load(f)
print(type(persons))
for person in persons:
print(person)
csv的简单介绍和演示
规则
- 开头是不留空,以行为单位。
- 可含或不含列名,含列名则居文件第一行。
- 一行数据不跨行,无空行。
- 以半角逗号(即,)作分隔符,列为空也要表达其存在。
- 列内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来。
- 文件读写时引号,逗号操作规则互逆。
- 内码格式不限,可为 ASCII、Unicode 或者其他。
- 不支持数字
- 不支持特殊字符
读取演示
import csv
def read_csv_demo1():
with open('123.csv', 'r', encoding='utf-8')as f:
# reader是一个迭代器
reader = csv.reader(f)
next(reader)
for x in reader:
name = x[0]
print({'name': name})
def read_csv_demo2():
with open('123.csv', 'r', encoding='utf-8')as f:
# 使用DictReader创建出来的对象不会包含标题那行的数据
# reader是个迭代器,遍历这个迭代器,返回出来的是一个字典
reader = csv.DictReader(f)
for x in reader:
print(x)
if __name__ == '__main__':
read_csv_demo2()
read_csv_demo1()
写入演示
这边需要注意,写入的时候classroom1
classroom2
这个两个文件的名字一定不能相同,否则后面就会把前面的进行覆盖
import csv
def csv_writer_demo1():
headers = ['usename', 'age', 'height']
value = [
('张三', 18, 200),
('lisi', 20, 210),
('老王', 50, 180)
]
with open('classroom1.csv', 'w', encoding='utf-8')as f:
writer = csv.writer(f)
writer.writerow(headers)
writer.writerows(value)
def csv_writer_demo2():
headers = ['usename', 'age', 'height']
value = [
{'usename': 'zhangsan', 'age': 18, 'height': 'china'},
{'usename': ']lisi', 'age': 19, 'height': 'us'},
{'usename': 'ww', 'age': 28, 'height': 'china'},
]
with open('classroom2.csv', 'w', encoding='utf-8')as f:
writer = csv.DictWriter(f, headers)
# 写入表头数据的时候,需要调用writerhead方法
writer.writeheader()
writer.writerows(value)
if __name__ == '__main__':
csv_writer_demo1()
csv_writer_demo2()