当前位置: 首页 > news >正文

python基础-16-处理csv文件和json数据

文章目录

  • 【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"}


http://www.dtcms.com/a/113767.html

相关文章:

  • 未来已来:探索AI驱动的HMI设计新方向
  • 动画过渡设置
  • 【JS】接雨水题解
  • 春季赛day15 Snailography
  • 铁电液晶(FLC)与反铁电液晶(AFLC)
  • SCADE One - 弥合基于模型设计与传统编程之间的鸿沟
  • 【学Rust写CAD】31 muldiv255函数(muldiv255.rs)
  • 设计模式简述(三)工厂模式
  • 《C语言代码解析与应用:数组操作的两种实现》
  • ctfshow VIP题目限免 版本控制泄露源码2
  • LeetCode详解之如何一步步优化到最佳解法:20. 有效的括号
  • 配置ASP.NET Core+NLog配置日志示例
  • 基于 FPGA 的分秒计数器
  • 如何实现两个视频融合EasyCVR平台的数据同步?详细步骤指南
  • 爬虫练习案例
  • zk基础—5.Curator的使用与剖析二
  • 打造高效英文单词记忆系统:基于Python的实现与分析
  • $R^n$超平面约束下的向量列
  • 游戏引擎学习第206天
  • React框架的Hooks实现原理
  • MicroPython 开发ESP32应用教程 之 WIFI简单应用 :时间同步、天气信息获取,ST7735 TFT屏驱动及任意中文字符显示
  • Linux制作deb安装包
  • 卡尔曼滤波器浅聊
  • windows 常用命令总结
  • MySQL表的增删改查基础版
  • 【大模型深度学习】如何估算大模型需要的显存
  • JavaScript基础--09-流程控制语句:选择结构(if和switch)
  • 文件系统-inode/软硬件连接(未完结)
  • 用 Python 制作仓库自动化指南
  • Kotlin协程机制