处理CSV(python)

news2025/2/22 5:48:20

处理CSV(python)

  • 简介
    • 1. CSV和Python简介
    • 2. 文章内容简介
  • 一、用csv模块读取和写入CSV文件
    • 1. CSV模块
    • 2. 示例
  • 二、用pandas库读取和写入CSV文件
    • 1. pandas
    • 2. 示例
  • 三、处理CSV文件中的特殊情况
    • 1. 特殊情况及处理方法
    • 2. 示例

简介

1. CSV和Python简介

CSV是一种常见的数据格式,可以用来存储和交换表格数据。CSV文件由一系列的行组成,每行包含一些用逗号分隔的字段。CSV文件可以用文本编辑器或excel打开和编辑,也可以用编程语言进行处理和分析。

Python是一种流行的编程语言,它有许多内置的模块和第三方库,可以方便地读取和写入CSV文件。

2. 文章内容简介

本文将介绍如何用Python处理CSV文件,包括以下几个方面:

  • 用csv模块读取和写入CSV文件
  • 用pandas库读取和写入CSV文件
  • 处理CSV文件中的特殊情况,如引号、换行符、编码等

一、用csv模块读取和写入CSV文件

1. CSV模块

csv模块是Python标准库中的一个模块,它提供了一些类和函数,可以帮助我们读取和写入CSV文件。csv模块常用的类有两个:

  • csv.reader:用来从一个文件对象或一个迭代器中读取CSV数据,返回一个迭代器,每次迭代返回一个列表,表示一行数据。
  • csv.writer:用来将数据写入一个文件对象或一个迭代器中,接受一个可迭代对象作为参数,每个元素是一个列表,表示一行数据。

2. 示例

示例文件:data.csv如下图:
在这里插入图片描述
用csv模块读取和写入CSV文件:

# 导入csv模块
import csv

# 以只读模式打开一个CSV文件
with open('data.csv', 'r') as f:
    # 创建一个csv.reader对象,指定分隔符为逗号
    reader = csv.reader(f, delimiter=',')
    # 遍历reader对象,打印每一行数据
    for row in reader:
        print(row)

# 用写入模式创建一个新的CSV文件,newline=''可以避免空行
with open('new_data.csv', 'w', newline='') as f:
    # 创建一个csv.writer对象,指定分隔符为逗号
    writer = csv.writer(f, delimiter=',')
    # 写入一些数据,每个元素是一个列表,表示一行数据
    writer.writerow(['name', 'age', 'gender'])
    writer.writerow(['Alice', '25', 'F'])
    writer.writerow(['Bob', '30', 'M'])

执行结果:
在这里插入图片描述
新创建的new_data.csv文件如下图:
在这里插入图片描述
newline='‘可以避免空行,如果没有这一句,在写入的每一行内容后面会有一行空行,如下图:
在这里插入图片描述
关于newline=’'的内容可以去看看pfm685757博主的文章: python3 writerow CSV文件多一个空行

二、用pandas库读取和写入CSV文件

1. pandas

pandas是一个流行的第三方库,它提供了一些高级的数据结构和函数,可以方便地进行数据分析和处理。pandas中最重要的数据结构是DataFrame,它是一个二维的表格数据结构,可以存储不同类型的数据,并支持各种操作。

pandas提供了一些函数,可以轻松地将DataFrame对象转换为CSV文件,或者从CSV文件中读取数据并创建DataFrame对象。这些函数有:

  • pandas.read_csv:从一个CSV文件或一个URL中读取数据,并返回一个DataFrame对象。
  • pandas.to_csv:将一个DataFrame对象写入一个CSV文件或一个字符串中。

2. 示例

示例文件:data.csv如下图所示:
在这里插入图片描述
用pandas读取和写入CSV文件:

# 导入pandas库
import pandas as pd

# 从一个CSV文件中读取数据,并创建一个DataFrame对象
df = pd.read_csv('data.csv')
# 打印df的基本信息
print(df.info())
# 打印df的表头及除表头外的5行数据,默认有表头
print(df.head())

# 用每个元素是字典的列表创建一个新的DataFrame对象
new_df = pd.DataFrame([{'name': 'Alice', 'age': 25, 'gender': 'F'}, {'name': 'Tom', 'age': 28, 'gender': 'M'}])
# 将new_df写入一个新的CSV文件中
new_df.to_csv('new_data.csv', index=False)

运行结果:
在这里插入图片描述
新创建的new_data.csv文件如下图:
在这里插入图片描述

三、处理CSV文件中的特殊情况

有些CSV文件中可能会包含一些特殊情况,如引号、换行符、编码等。在处理这些文件时,我们需要特别注意这些情况,以免导致解析错误或数据丢失。

1. 特殊情况及处理方法

  • 引号:有些CSV文件中的字段可能包含引号,这会影响到CSV文件的解析。如果一个字段包含的文本中包含逗号,则需要将该字段用双引号引起来,以与其他字段区分开。而如果一个字段中本身就包含双引号,则需要用两个双引号来表示一个双引号,例如:“field with ““double quotes”””.
  • 换行符:有些CSV文件中的字段可能包含换行符,这也会影响到CSV文件的解析。通常情况下,换行符应该被视为字段内容的一部分,而不是分隔符。当读取包含换行符的CSV文件时,应该将整个文本字段读入并处理换行符。而写入包含换行符的CSV文件时,则需要将该字段用双引号或其他符号引起来,以确保换行符不会被看作是一个新的行。
  • 编码问题:CSV文件中的数据可能使用不同的编码方式进行存储,这也会影响到CSV文件的解析。通常情况下,应该使用与CSV文件相同的编码方式进行解析和处理。如果CSV文件的编码方式不确定,则可以尝试使用一些常见的编码方式(如UTF-8、GBK、ISO-8859-1等)进行解析,并观察数据的准确性和完整性。

2. 示例

示例文件:data_with_quotes.csv如下图:
在这里插入图片描述

处理包含引号和换行符的CSV文件:

import csv

# 使用csv.reader读取包含引号和换行符的CSV文件
with open('data_with_quotes.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',', quotechar='"')
    for row in reader:
        print(row)

# 使用csv.writer写入包含引号和换行符的CSV文件
with open('new_data_with_quotes.csv', 'w', newline='') as f:
    # 使用quotechar参数来指定引号字符,quoting参数来指定如何引用特殊字符
    writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['name', 'age', 'text'])
    writer.writerow(['Alice', '25', 'This is a "text" field.'])
    writer.writerow(['Tom', '28', 'This is a field\nwith\nnewlines.'])

运行结果:
在这里插入图片描述

新创建的new_data_with_quotes.csv文件如下图所示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态内存管理--从动态内存分配函数开始和你一起了解

目录前言1.为什么存在动态内存分配2.动态内存函数的介绍2.1malloc函数和free函数2.2calloc函数2.3realloc函数3.常见的动态内存错误3.1对NULL指针的解引用操作3.2对动态开辟空间的越界访问3.3对非动态内存开辟的内存使用free释放3.4使用free释放一块动态内存的一部分3.5对同一块…

【致敬未来的攻城狮计划】— 连续打卡第三天:欲速则不达,今天是对RA2E1 基础知识的补充学习。

系列文章目录 1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下 2.开发环境的选择和调试(从零开始,加油) 文章目录 目录 系列文章目录 文章目录 前言 一、RA是什么? 二、RA特点…

RHCE——shell脚本练习

一.实验要求 1、判断web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式判断该程序是否运行),如果没有运行,则启动该服务并配置防火墙规则。 ​2、使用curl命令访问第二题的web服务&#xff…

Kafka的历史版本对应SpringBoot版本

截至目前(2023年),Kafka的最新版本是2.9.0,发布于2022年11月30日。Kafka的历史版本可以在Kafka官方网站的下载页面中找到。Kafka从0.8版本开始发布,经历了多个版本的迭代和升级。以下是一些比较重要的Kafka版本及其发布…

Python实现哈里斯鹰优化算法(HHO)优化Catboost回归模型(CatBoostRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO),该算法有较强的全…

【LeetCode】剑指 Offer 52. 两个链表的第一个公共节点 p253 -- Java Version

题目链接:https://leetcode.cn/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/ 1. 题目介绍(52. 两个链表的第一个公共节点) 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点…

基于微信小程序开发的“校园帮”系统

基于微信小程序开发的“校园帮”系统【毕业论文,源码】 本系统使用了java和mysql结合的结构开发了微信小程序应用,系统中所有和数据库有关系的操作都通过一个通用类来实现,大大提高了代码的耦合性,当数据库类型等信息变化后直接修…

【剑指offer|6.寻找峰值】

0.寻找峰值 关键点: 返回任意一个峰值的下标即可nums[-1]nums[n]负无穷 输入:nums [1,2,3,1] 输出:2 解释:3 是峰值元素,你的函数应该返回其索引 2 1.傻瓜编程(纯属玩乐) class Solution { public:int findPeakElement(vector&l…

普通人在家就能用ChatGPT轻松月赚$5000美金的方法

太震撼了,这简直就是下个世纪才应该出现的产品,突然之间我感觉就像人类,刚刚发明了电灯一样,一切都要变了,而且变的速度太快,让我都觉得有点茫然了,绝对就是技术大爆炸。今天这篇文章我想通过ch…

React 的源码与原理解读(六):reconcileChildren 与 DIFF 算法

写在专栏开头(叠甲) 作者并不是前端技术专家,也只是一名喜欢学习新东西的前端技术小白,想要学习源码只是为了应付急转直下的前端行情和找工作的需要,这篇专栏是作者学习的过程中自己的思考和体会,也有很多参…

常年不卷,按时下班,工作能力强,同事求助知无不言,不扯皮,不拉帮结派,这样的职场清流竟然被裁掉了!...

在职场上,你永远想不到什么样的员工会被优化,比如下面这位:常年不卷,按时下班,工作很专业,同事问什么都回答,不扯皮,不拉帮结派,简直是职场清流。在上个月竟然被优化了&a…

一分钟腾讯云轻量应用服务器性能评测(慎入坑)

腾讯云轻量应用服务器性能评测,轻量服务器CPU主频、处理器型号、公网带宽、月流量、Ping值测速、磁盘IO读写及使用限制,轻量应用服务器CPU内存性能和标准型云服务器CVM处于同一水准,所以大家不要担心轻量应用服务器的性能,腾讯云百…

JavaEE企业级应用开发教程——第十章 初识Spring MVC框架(黑马程序员第二版)(SSM)

第十章 初识Spring MVC框架 JSP Model2架构模型是一种将页面显示、流程控制和业务逻辑分离的Web应用程序架构模型,采用JSP、Servlet和JavaBean技术实现。但是,它将通用逻辑以硬编码的方式实现,每次开发新的Web应用程序时都需要重新编写Servl…

MyBatis注解开发---实现增删查改和动态SQL

目录 1. 环境搭建 (1)创建持久层接口,并在接口方法上定义Sql语句 (2)测试方法 (3)运行结果 2. 注解实现增删查改 (1)增加用户 (2)删除用…

【4.17】贪心算法入门

什么是贪心? 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。 贪心的解题步骤? 贪心算法一…

《人体地图》笔记

《人体地图》 坂井建雄 著 孙浩 译 腹部通向大腿的隧道 腹部与大腿的分界点是大腿根部,即是腹股沟。 腹壁肌肉连结在腹股沟韧带上,腹壁肌肉包括三层,分别为腹外斜肌、腹内斜肌和腹横肌,每块肌肉都有一个张开的小孔,…

【靶场设计和渗透】

目录 一、前言 二、靶场设计 1、局域网 2、说明 三、渗透测试 1、信息收集 2、漏洞利用 四、后渗透利用 1、提权 2、权限维持 一、前言 为了深入贯彻学习网络安全法律法规,深入学习渗透测试知识,强化实战技能............ 编不出来了&#xff…

The Sandbox 的 OliveX Fitness 之城来啦!

4 月 11 日至 17 日,亲自来体验一下吧! 这种独特的体验将有趣和故事驱动的游戏与健身以及奖励结合起来。玩家可以探索隐藏的角落,逃出迷宫,爬上梯子,清除障碍,完成相互关联的任务,所以战略规划是…

Avue dynamic表单实现form单选,修改及新增项

Avue dynamic表单实现form单选,修改及新增项 AvueDialogFormTableViewOption.js /** Description:银行账号* Version: 1.0* Autor: Tj* Date: 2023-03-21 11:02:42*/ export const BankAccountOption (vueObj, formData) > {return {labelWidth: 100, //整体列…

【华为OD机试】1046 - 计算字符串的编辑距离

文章目录一、题目🔸题目描述🔸输入输出🔸样例1二、思路解析三、代码参考作者:KJ.JK🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f…