《Python编程实训快速上手》第十天--处理CSV文件和JSON数据

CSV:简化的电子表格,被保存为纯文本文件

JSON:是一种数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,以JavaScript源代码的形式将信息保存在纯文本文件中 

一、csv模块

CSV文件中的每行代表电子表格中的一行,逗号分隔了该行中的单元格。但并非CSV文件中的每个逗号都表示两个单元格之间的分界。CSV文件也有自己的转义字符,允许逗号和其他字符作为值的一部分。所以总是应该使用csv模块来读写CSV文件。

1、reader对象

reader对象让你迭代遍历CSV文件中的每一行 

使用Python的csv模块读取CSV文件可以归结为以下几个步骤:

  1. 导入csv模块: 首先,你需要导入Python的csv模块,这样你才能使用它提供的功能。

  2. 打开CSV文件: 使用open()函数打开CSV文件。你需要提供文件路径作为参数,并指定模式(通常是'r',表示只读)。

  3. 创建CSV读取器: 将open()函数返回的文件对象传递给csv.reader()函数,这将创建一个CSV读取器对象。

  4. 读取数据: 使用list()函数将CSV读取器对象转换成一个普通的Python列表。这个列表将包含文件中的每一行,其中每一行都是一个列表,包含该行中的所有字段。

  5. 访问数据: 可以用表达式exampleData[row] [col]来访问特定行和列的值。

import csv
exampleFile = open("example.csv")
exampleReader = csv.reader(exampleFile)
exampleData = list(exampleReader)
print(exampleData)

>> [['4/5/2015 13:34', 'Apples', '73'], ['4/5/2015 3:41', 'Cherries', '85'], ['4/6/2015 12:46', 'Pears', '14'], ['4/8/2015 8:59', 'Oranges', '52']]

 2、在for循环中,从reader对象读取数据

对于大型的CSV文件,你需要在一个for循环中使用reader对象。这样可以避免将整个文件一次性装入内存。

import csv
exampleFile = open("example.csv")
exampleReader = csv.reader(exampleFile)
for row in exampleReader: 
    #line_num变量为当前行的编号
    print('Row #' + str(exampleReader.line_num) + ' ' + str(row))

 3、writer对象

writer对象让你将数据写入 CSV 文件。

import csv
exampleFile = open("example.csv","w",newline="")
exampleWriter = csv.writer(exampleFile)
exampleWriter.writerow([1,2,3,45,5])
exampleWriter.writerow(['Hello', 'eggs', 'bacon', 'ham'])
exampleWriter.writerow(['Hello,', 'eggs,', 'bacon,', 'ham,'])

在Windows操作系统上,需要为open()函数的newline关键字参数传入一个空字符串,保证文件单倍行距

在CSV文件中,writer对象使用双引号自动转义了'Hello, world!'中的逗号

 

4、delimiter和lineterminator关键字参数 

delimiter:分隔符。默认情况下,CSV文件的分隔符是逗号。

lineterminator:行终止字符。默认情况下,行终止字符是换行符。

例如:希望用制表符代替逗号来分隔单元格,并希望有两倍行距

import csv
exampleFile = open("example.csv","w",newline="")
exampleWriter = csv.writer(exampleFile,delimiter='\t', lineterminator='\n\n')
exampleWriter.writerow([1,2,3,45,5])
exampleWriter.writerow(['Hello', 'eggs', 'bacon', 'ham'])
exampleWriter.writerow(['Hello,', 'eggs,', 'bacon,', 'ham,'])

5、DictReader和DictWriter CSV对象

readerwriter对象通过使用列表对CSV文件的行进行读写。DictReaderDictWriter CSV对象实现相同的功能,但使用的是字典,且它们使用CSV文件的第一行作为这些字典的键。 

1)DictReader

例子:第一行列标题为Name,Pet和Phone

 

import csv
exampleFile = open("example.csv")
exampleReader = csv.DictReader(exampleFile)
for row in exampleReader:
    print(row['Name'], row['Pet'], row['Phone'])

如果csv文件中第一行不是列标题,想使用键值对形式读取文件时,在DictReader()中添加一个参数即可:

exampleDictReader = csv.DictReader(exampleFile, ['Name', 'Pet', 'Phone'])

 2)DictWriter

import csv
exampleFile = open("example.csv","w",newline="")
exampleDictWriter = csv.DictWriter(exampleFile,fieldnames=["Name","Pet","Phone"])
exampleDictWriter.writeheader()
exampleDictWriter.writerow({'Name': 'Alice', 'Pet': 'cat', 'Phone': '555- 1234'})
exampleDictWriter.writerow({'Name': 'Bob', 'Phone': '555-9999'})
exampleDictWriter.writerow({'Phone': '555-5555', 'Name': 'Carol', 'Pet': 'dog'})

writeheader() 方法决定包含标题行

传入writerow()的字典中的键-值对的顺序并不重要:它们是按照给DictWriter()的键的顺序写的。

二、JSON和API

JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

许多网站应用API允许开发者请求数据,并JSON格式返回数据,使得开发者可以轻松地进行数据交换和网络编程。

例子:JSON文件格式

{
  "name": "John Doe",
  "age": 30,
  "isEmployed": true,
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA",
    "zip": "12345"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "555-1234"
    },
    {
      "type": "office",
      "number": "555-5678"
    }
  ],
  "children": null,
  "hobbies": ["reading", "hiking", "coding"]
}

三、json模块

JSON不能存储每一种Python值,它只能包含以下数据类型的值:字符串、整型、浮点型、布尔型、列表、字典和NoneTypeJSON字符串总是用双引号

1、用loads()函数读取JSON

这个名字的意思是“load string”,而不是“loads”

loads()函数将该数据返回为一个Python字典

import json
stringOfJsonData = '{"name": "Zophie", "isCat": true, "miceCaught": 0,"felineIQ": null}'
jsonDataAsPythonValue = json.loads(stringOfJsonData)
print(jsonDataAsPythonValue)

>> {'name': 'Zophie', 'isCat': True, 'miceCaught': 0, 'felineIQ': None}

2、用dumps函数写出JSON

json.dumps()函数表示“dump string”,而不是“dumps”,将一个Python值转换成JSON格式的数据字符串。

import json
pythonValue = {'isCat': True, 'miceCaught': 0, 'name': 'Zophie', 'felineIQ':  None}
stringOfJsonData = json.dumps(pythonValue)
print(stringOfJsonData)

>> {"isCat": true, "miceCaught": 0, "name": "Zophie", "felineIQ": null}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922106.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用FileZilla搭建ftp服务器

一 利用windows自带的ftp服务搭建服务器,要复杂一些,好处是无需借用外部软件。 也有一些好的工具,如FileZilla的Server版,构建过程简单,好用。 下面看看。 二 安装FileZilla Server 当前下载版本是0.9.43&#xf…

P1 练习卷(C++4道题)

1.纷繁世界 内存限制:256MB 时间限制:1s 问题描述 这是一个纷繁复杂的世界。 某一天清晨你起床很迟,没有吃上早饭。于是你骑着自行车去超市,但是你又发现商店的工作人员已经重新贴上了价格标签,零食价格都涨了50%。你…

青少年编程等级考试C++一级,硬币反转问题

代码 #include<iostream>using namespace std;bool a[300];int main(){ int n,m; cin >> n >> m; for(int i 1;i < m;i) { for (int j 1;j < n;j) { if( j % i 0) { a[j] !a[j];…

外卖系统开发实战:从架构设计到代码实现

开发一套外卖系统&#xff0c;需要在架构设计、技术选型以及核心功能开发等方面下功夫。这篇文章将通过代码实例&#xff0c;展示如何构建一个基础的外卖系统&#xff0c;从需求梳理到核心模块的实现&#xff0c;帮助你快速掌握开发要点。 一、系统架构设计 一个完整的外卖系…

AJAX笔记 (速通精华版)

AJAX&#xff08;Asynchronous Javascript And Xml&#xff09; 此笔记来自于动力节点最美老杜 传统请求及缺点 传统的请求都有哪些&#xff1f; 直接在浏览器地址栏上输入URL。点击超链接提交 form 表单使用 JS 代码发送请求 window.open(url)document.location.href urlwi…

ThingsBoard规则链节点:AWS SQS 节点详解

引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备管理、数据收集、处理和可视化等功能。规则链是 ThingsBoard 中的一个强大功能&#xff0c;允许用户定义复杂的业务逻辑来处理设备上报的数据。在规则链中&#xff0c;AWS SQS 节点用于将消息发送到 Amazon Simp…

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书

目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 ‌Lets Encrypt‌是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构&#xff08;CA&#xff09;&#xff0c;旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…

二进制 分析工具:Radare2、r2frida、Binutils、file、string、as、nm、ldd、objdump、readelf、strip

1、二进制 分析工具 工欲善其事&#xff0c;必先利其器&#xff0c;在二进制安全的学习中&#xff0c;​使用工具尤为重要。遇到一个不熟悉的文件时&#xff0c; 首先要确定 "这是什么类型的文件"&#xff0c;回答这个问题的首要原则是&#xff0c;绝不要根据文件的扩…

如何通过OpenSSL来创建自签名的CA证书?

通过创建自签名CA证书可以让我们在没有商业支持的情况下学习与研究PKI&#xff08;公钥基础设施&#xff09;和SSL/TLS技术&#xff0c;本文将详细介绍如何通过OpenSSL来创建自签名的CA证书。 1. 初衷&#xff1a;为什么需要创建自签名CA证书&#xff1f; 除了开篇引言中提到的…

浦语提示词工程实践(LangGPT版,服务器上部署internlm2-chat-1_8b,踩坑很多才完成的详细教程,)

首先&#xff0c;在InternStudio平台上创建开发机。 创建成功后点击进入开发机打开WebIDE。进入后在WebIDE的左上角有三个logo&#xff0c;依次表示JupyterLab、Terminal和Code Server&#xff0c;我们使用Terminal就行。&#xff08;JupyterLab可以直接看文件夹&#xff09;…

vscode下面python调试报错ImportError: cannot import name ‘Literal‘ from ‘typing‘

1 问题描述 我在vscode下面编写python程序&#xff0c;这个程序是在一个英伟达anoconda环境下的项目。之前能运行能调试&#xff0c;最近发现只能运行ctlf5&#xff0c;但是使用f5进行调试时&#xff0c;报错“File “c:\Users\86137.vscode\extensions\ms-python.debugpy-202…

订单日记为“惠采科技”提供全方位的进销存管理支持

感谢温州惠采科技有限责任公司选择使用订单日记&#xff01; 温州惠采科技有限责任公司&#xff0c;成立于2024年&#xff0c;位于浙江省温州市&#xff0c;是一家以从事销售电气辅材为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提升运营效率又能节省成本…

应用|“华院计算数智人在第一财经的应用”案例入选《2024年人工智能先锋案例集》

华院计算技术&#xff08;上海&#xff09;股份有限公司&#xff08;以下简称“华院计算”&#xff09;的 “华院计算数智人在第一财经《秒懂金融》及《新春特别节目》应用”案例在300余个案例申报中脱颖而出&#xff0c;入选中国人工智能产业发展联盟《2024年人工智能先锋案例…

eduSRC挖洞思路

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…

86汇编-数据串的输出

在 86 汇编语言中&#xff0c;输出数据串&#xff08;例如字符串&#xff09;的方式通常依赖于操作系统和环境。对于 DOS 操作系统&#xff0c;常见的做法是使用 BIOS 中断或 DOS 中断。这里将展示如何在 DOS 环境下使用 86 汇编语言输出一个字符串。 使用 DOS 中断 21h 输出字…

【贪心算法第二弹——2208.将数组和减半的最小操作数】

1.题目解析 题目来源 2208.将数组和减半的最小操作数——力扣 测试用例 2.算法原理(贪心策略) 3.实战代码 class Solution { public:int halveArray(vector<int>& nums) {priority_queue<double> hash;double sum 0.0;for(auto e : nums){hash.push(e);sum …

【2024 Optimal Control 16-745】Ubuntu22.04 安装Julia

找不到Julia 内核 下载Julia curl -fsSL https://install.julialang.org | sh官网下载&#xff1a;Julia 安装 IJulia 打开 Julia REPL&#xff08;在终端中输入 julia&#xff09;并执行以下命令安装 IJulia&#xff1a; using Pkg Pkg.add("IJulia")这将为 Ju…

STM32F103系统时钟配置

时钟是单片机运行的基础&#xff0c;时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏&#xff0c;决定CPU速率&#xff0c;像人的心跳一样 只有有了心跳&#xff0c;人才能做其他的事情&#xff0c;而单片机有了时钟&#xff0c;才能够运行执行指令&#x…

详细描述一下Elasticsearch索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch索引文档的过程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Elasticsearch 是…

Hive分桶超详细!!!

1、分桶的意义 数据分区可能导致有些分区,数据过多&#xff0c;有些分区,数据极少。分桶是将数据集分解为若干部分(数据文件)的另一种技术。 分区和分桶其实都是对数据更细粒度的管理。当单个分区或者表中的数据越来越大&#xff0c;分区不能细粒度的划分数据时&#xff0c;我…