文章目录
- 【README】
- 【16】处理csv文件和json数据
- 【16.1】csv模块
- 【16.1.1】reader对象
- 【16.1.2】在for循环中, 从reader对象读取数据
- 【16.1.3】writer对象
- 【16.1.5】DictReader与DictWriter对象
- 【16.4】json模块
- 【16.4.1】使用loads()函数读取json字符串并转为json对象(python的字典类型)
- 【16.4.2】用dumps函数把json对象(字典)转为json字符串
【README】
本文总结自《python编程快速上手-让繁琐工作自动化》第16章,非常棒的一本书,墙裂推荐;
【16】处理csv文件和json数据
【16.1】csv模块
1)csv文件:csv是一种文件格式,csv格式的文件是一个文本文件,具有用逗号分割的值;
【16.1.1】reader对象
1)使用csv模块读取csv文件,需要创建一个reader对象,reader对象让你迭代遍历csv文件中的每一行;
csvFileA01 = open(Path.cwd() / '1601A01.csv')
csvFileA01Reader = csv.reader(csvFileA01)
print(list(csvFileA01Reader))
# [['id', 'name', 'addr'], ['1', '张三01', '成都01'], ['2', '张三02', '成都02'], ['3', '张三03', '成都03']]
csvFileA01.close()
【16.1.2】在for循环中, 从reader对象读取数据
1)遍历每行:在for循环中, 从reader对象读取数据;
print("====== 遍历每行 ======")
csvFileA01 = open(Path.cwd() / '1601A01.csv')
reader01 = csv.reader(csvFileA01)
for row in reader01:
print(f"row[%d]=%s" % (reader01.line_num, str(row)))
csvFileA01.close()
# ====== 遍历每行 ======
# row[1]=['id', 'name', 'addr']
# row[2]=['1', '张三01', '成都01']
# row[3]=['2', '张三02', '成都02']
# row[4]=['3', '张三03', '成都03']
【16.1.3】writer对象
1)使用writer对象把数据写入csv文件;
# 16.1.3 writer对象写入数据到csv文件
print("\n====== writer对象写入数据到csv文件 ======")
csvFileA01 = open(Path.cwd() / '1601A01.csv', "w", newline='')
writer01 = csv.writer(csvFileA01)
writer01.writerow(['4', '张三04', '成都04'])
writer01.writerows([['5', '张三05', '成都05'], ['6', '张三06', '成都06']])
csvFileA01.close()
【16.1.5】DictReader与DictWriter对象
1)对于包含列标题的csv文件,通常使用DictReader和DictWriter对象,而不是 reader和writer对象;
- DictReader和DictWriter操作的数据格式是字典,且使用csv文件的第一行的列值作为字典的键;
- reader和writer使用列表对csv文件的行进行读写;
2)使用DictReader读取csv对象
# 16.1.5 DictReader 和 DictWriter的csv对象
print("\n====== 使用DictReader读取csv对象 ======")
csvFileA01 = open(Path.cwd() / '1601A01.csv', "r")
tempDictReader = csv.DictReader(csvFileA01, ['id', 'name', 'addr'])
for row in tempDictReader:
print(str(row['id']), str(row['name']), str(row['addr']), end=' ')
print()
csvFileA01.close()
# ====== 使用DictReader读取csv对象 ======
# 4 张三04 成都04
# 5 张三05 成都05
# 6 张三06 成都06
3)使用DictWriter保存数据到csv对象
print("\n====== 使用DictWriter保存数据到csv对象 ======")
csvFileA01 = open(Path.cwd() / '1601A01.csv', "w", newline='')
tempDictWriter = csv.DictWriter(csvFileA01, ['id', 'name', 'addr'])
# 写入标题行
tempDictWriter.writeheader()
# 写入字典数据
tempDictWriter.writerow({'id':'101', 'name':'张三101', 'addr':'成都101'})
csvFileA01.close()
【16.4】json模块
1)python的json模块处理了json数据字符串和python数据之间的转换的所有细节;;
- json.loads():把包含json数据的字符串转换为python值(python对象);
- 注意:json字符串总是用双引号表示;
- json.dumps():表示dump string,把一个python值转换为json格式的数据字符串;
2)json不能存储每种python数据类型, 只能包含以下类型的对象,包括字符串,整型, 浮点型,布尔型,列表,字典和NoneType;
- json不能表示的对象:包括 File对象, csv reader, csv writer, Regex等;
【16.4.1】使用loads()函数读取json字符串并转为json对象(python的字典类型)
# 16.4.1 使用loads()函数读取json字符串并转为json对象(python的字典类型)
print("====== 使用loads()函数读取json字符串并转为json对象 ======")
jsonData01 = '{"id":"201", "name":"张三201", "addr":"成都201"}'
jsonObj01 = json.loads(jsonData01)
print(type(jsonObj01)) # jsonObj01 是字典类型
print(jsonObj01)
# <class 'dict'>
# {'id': '201', 'name': '张三201', 'addr': '成都201'}
【16.4.2】用dumps函数把json对象(字典)转为json字符串
print("\n====== 用dumps函数把json对象转为json字符串 ======")
jsonStr02 = json.dumps(jsonObj01)
print(type(jsonStr02))
print(jsonStr02)
# <class 'str'>
# {"id": "201", "name": "\u5f20\u4e09201", "addr": "\u6210\u90fd201"}