百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python如何读写csv文件(python 读csv文件)

off999 2024-10-28 16:53 160 浏览 0 评论

先简单介绍一下 csv 格式的文件是什么意思。先看一下百度百科怎么说的。

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。

简单理解就是,每一行代表一个数据记录,每个字段之间用逗号进行分隔。字段可以包含文本、数字或日期等各种类型的文本数据。

下面给一个数据示例:

姓名,年龄,性别
张三,25,男
李四,30,男
王五,28,男

这样的一个文件,你把它的后缀名改成csv,就可以用excel打开了,展示的效果基本和excel文件一致,当然也可以用各种编辑器打开编辑。那么在python中如何读写csv文件呢?

方案一:直接使用文本文件读写的方式

既然csv是纯文本形式存储的,那就可以按照文本文件的方式进行读写,只要知道它的规则:每一行代表一个数据记录,每个字段之间用逗号进行分隔。其实也可以用其他符号,比如分号,但是既然叫逗号分隔符,而且大多数人都是用逗号,那么我们这里最好是随大流就行了。

with open('demo.csv', 'w', encoding='utf8') as file:
    file.write('姓名,年龄,性别\n')
    file.write('张三,25,男\n')
    file.write('李四,30,男\n')
    file.write('王五,28,男\n')

with open('demo.csv', 'r', encoding='utf8') as file:
    for line in file:
        print(line, end='')
        fields = line.strip('\n').split(',')
        print(fields)

方案二:标准库中的csv模块,使用其中的render和writer完成csv的读写

在上面的例子中可以看见,直接用文本的方式读写,当你需要读取的字段的时候需要使用strip和split方法进行分割,写入的时候需要将数据字段拼接成一个大的字符串,略选麻烦,其实csv文件的读取和写入可以通过内置的csv模块轻松实现。

csv.reader(csvfile, dialect='excel', **fmtparams)
csv.writer(csvfile, dialect='excel', **fmtparams)
  • csvfile 可以是任何对象,只要这个对象支持 iterator 协议并在每次调用 __next__() 方法时都返回字符串,文件对象 和列表对象均适用。
  • dialect 是用于不同的 CSV 变种的特定参数组
  • fmtparams 可以覆写当前变种格式中的单个格式设置
import csv
with open('demo.csv', 'r', encoding='utf8') as file:
    render = csv.reader(file)
    print(next(render)) #['姓名', '年龄', '性别']
    print(next(render)) #['张三', '25', '男']
    # 也可以循环获取
    for data in render:
        print(data)
import csv
data = [
    ['姓名', '年龄', '性别'],
    ['张三', '25', '男'],
    ['李四', '30', '男'],
    ['王五', '28', '男1'],
]
with open('demo.csv', 'w', encoding='utf8') as file:
    writer = csv.writer(file)
    # 逐行写入
    for row in data:
        writer.writerow(row)

with open('demo.csv', 'w', encoding='utf8') as file:
    writer = csv.writer(file)
    # 多行一起写入
    writer.writerows(data)

我们看一下结果文件,发现空了一行,怎么删除这一行呢,就需要在open的时候设置newline='',这样就删除了空行。

with open('demo.csv', 'w', encoding='utf8', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

方案三:使用csv.DictReader和csv.DictWriter读写字典文件

按照上面方案二的做法,比方案一要方便很多了,不需要自己手动去做字符串的拼接和分割了,但是它读取和写入的数据结构都是列表,需要通过索引来访问,而有时我们的数据是字典形式,具有明确标题行。

render和writer其实是更加灵活的方式,因为它不依赖于标题行的存在;而DictReader和DictWriter则更适用于那些具有明确标题行的CSV文件。DictReader假设CSV文件的第一行是标题行,并据此创建字典的键。如果CSV文件没有标题行,你需要提供fieldnames参数。

import csv
with open('demo.csv', mode='r', encoding='utf8', newline='') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row)
        print(row['姓名'])
# OrderedDict([('姓名', '张三'), ('年龄', '25'), ('性别', '男')])
# OrderedDict([('姓名', '李四'), ('年龄', '30'), ('性别', '男')])
# OrderedDict([('姓名', '王五'), ('年龄', '28'), ('性别', '男')])

# 如果文件中没有标题行,根据你的CSV文件自定义列名
fieldnames = ['姓名', '年龄', '性别']
with open('demo.csv', mode='r', encoding='utf8', newline='') as file:
    reader = csv.DictReader(file, fieldnames=fieldnames)
    for row in reader:
        print(row)
        print(row['姓名'])
# 结果是一样的

再看一下写入

import csv
fieldnames = ['姓名', '年龄', '性别']
with open('demo.csv', mode='w', encoding='utf8', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'姓名': '111', '年龄': '222', '性别': '333'})

如何解析字段中包含逗号(,)的csv文件

再思考一个问题,既然是逗号分隔符,那如果我们的原始数据中就含有逗号呢,这种数据怎么处理?其实不用担心,面对这种问题无须特殊处理,还是可以使用标准库中的方法直接读写,会自动处理:

writer.writerow({'姓名': '11,1', '年龄': '222', '性别': '333'})
# 结果
# 姓名,年龄,性别
# "11,1",222,333

我们看到写入的结果中,数据被双引号包围起来了,避免产生歧义。

但是如果我们是使用第一种方式,直接用文本的方式读写csv文件的时候,这种问题的处理是非常麻烦的,所以使用的时候要慎重。

相关推荐

百度云网页版登录入口(百度网盘网页版登录18581113484212054.5929.3810549)
百度云网页版登录入口(百度网盘网页版登录18581113484212054.5929.3810549)

先登录网页版试一试,一般都会有提示。百度网盘客户端不能登录原因有很多:1不能用第三方账号登陆,否则登录失败。2没有绑定手机3百度网盘客户端用的以前旧版本,下载安装最新版4存储了违规文件被系统封禁,需要先解封,再来登陆。手机登陆云盘...

2026-01-19 18:51 off999

源码网(源码网棋牌力荐双击玩.安卓应用更新链接.org)

统一机构代码查询官网https://www.cods.org.cn/gscx/产品标准号查询官网:国家质量技术监督管理局产品编码中心官方网站网采代码是指可以把它理解成源文代码,就拿我们看到的这个网页举...

7723游戏官网入口(7723游戏盒官方正版)

要登录和下载游戏,你需要按照以下步骤操作:首先,确保你已经安装了7723游戏盒应用程序。然后,打开应用程序并点击登录按钮。输入你的用户名和密码,如果你还没有账号,可以点击注册按钮创建一个新账号。完成登...

谷歌安卓版app下载(谷歌paypal官网注册入口)

手机系统软件闪退或者第三方软件闪退,可以查看以下几种原因:一、清理后台程序;我们在使用完一个软件的时候,习惯性的返回到桌面,经常没有真正退出程序,而程序还在后台运行,当后台程序过多时,就可能导致闪退。...

qq手游下载(手游版qq)

要知道一个游戏的原文件大小,可以按照以下步骤:1.在应用商店下载并安装该游戏。2.进入手机的“设置”界面,然后点击“应用管理”或“应用程序”。3.找到并点击游戏应用。4.在游戏应用信息页面中,可以看到...

唱歌软件哪个最好用(哪款唱歌软件好用又免费)

k歌软件的《全民K歌》最好。推出较早的一款K歌软件,在功能上还是包含比较多的,全民K歌基于用户需求打造的线上K歌工具,不仅提供了海量版权曲库,还不断迭代AI智能评分、AI智能修音等先进黑科技,用专业的...

直接在手机转换jpg格式(直接在手机转换jpg格式怎么弄)
  • 直接在手机转换jpg格式(直接在手机转换jpg格式怎么弄)
  • 直接在手机转换jpg格式(直接在手机转换jpg格式怎么弄)
  • 直接在手机转换jpg格式(直接在手机转换jpg格式怎么弄)
  • 直接在手机转换jpg格式(直接在手机转换jpg格式怎么弄)
迅雷7苹果官方下载(迅雷官方下载苹果最新版本)

1、建议您在迅雷软件主界面右上角点击倒三角,在菜单中进入迅雷下载诊断工具,诊断下是否有浏览器支持相关的问题。2、在浏览器管理加载项里面看下是否开启了迅雷下载支持,如未启用请点击启用即可。3、可能是在安...

在线设计logo商标免费(logo在线设计网)

你好,注册费用按类别按个数收取,每类每个商标费用:1、一般商标每件300元(十年有效期,含十年的费用,国内公司或个人,其中国家规费300元);2、代理机构网报一般商标每件1000元(十年有效期,含十年...

如何快速学会ps软件(怎么学好ps软件,会简单的就好)

1.Photoshop只是一个工具而已,不要想的那么难2.基础是让你们最容易忽略的,但是必须牢固3.多去分析优秀作品,总结经验,技巧4.看作品尝试用不同的方法制作5.不需掌握PS所有功能,熟悉和工作相...

三国群雄传(三国群雄传2)

三国群英传2游戏中,分为五个时期,每个时期的君主数量不等,但主角还是曹操、孙权、刘备,几乎这三人在几个时期都是需要励精图治的时期。而刘备是很多人同情的一个贤明君主,因为从三国开端到三足鼎立时期,刘备都...

360官网电脑版(360官方网页)

http://hao.360.cn/360导航--一个主页,整个世界,为用户提供门户、新闻、视频、游戏、小说、彩票等各种分类的优秀内容和网站入口,提供简单便捷的上网导航服务。1.不是官方网站。2....

nba免费直播高清jrs免(nba直播在线观看高清jrs)

由于美国和中国之间贸易战的原因,和火箭总裁的出言不逊,导致中国和NBA的播放停止。所以不能观看,等到后期和解后可以继续观看!祝你好运!有高清的,看NBA还是挺好的。方法一:JRS直播1、JRS直播是一...

pc游戏模拟器(pc游戏模拟器推荐)

目前,PC游戏模拟器中最受欢迎和认可的是著名的BlueStacks。它是一款免费的安卓模拟器,可以在电脑上运行各种安卓游戏和应用程序。BlueStacks具有卓越的性能和稳定性,提供了流畅的游戏体验,...

炉石传说手游官网下载(炉石传说手游官网下载国服)

要下载炉石传说端游,可前往该游戏的官方网站或Blizzard官网,从中下载安装程序并安装。同时,玩家也可在国内的一些游戏下载网站上下载该游戏的安装包,但需保证其来源可靠。另外,在下载安装游戏时,可根据...

取消回复欢迎 发表评论: