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

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

off999 2024-10-28 16:53 159 浏览 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文件的时候,这种问题的处理是非常麻烦的,所以使用的时候要慎重。

相关推荐

直接在手机转换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官网,从中下载安装程序并安装。同时,玩家也可在国内的一些游戏下载网站上下载该游戏的安装包,但需保证其来源可靠。另外,在下载安装游戏时,可根据...

中信建投证券手机版下载(中信建投证券手机版下载什么软件)

不好退。1.中信建投证券app是一种金融工具,下载使用后就是用于完成交易和管理投资的,因此一旦下载就意味着启动了使用过程,是不可以退掉的。2.一些软件商店对于使用了特定时间的软件才可以退款,但是中...

cad破解版在哪里下载(cad破解版怎么下载怎么安装)

如果你下载软件的时候,有提示是敲诈的病毒,那么有可能是因为你在下载软件的时候,不是正规渠道下载的,所以你下载的软件会带有病毒,你可以去电脑管家里面找到你的杀毒软件,来对你下载的软件进行病毒的查杀,你也...

在线识别图片(在线识别图片找原图情侣头像)
  • 在线识别图片(在线识别图片找原图情侣头像)
  • 在线识别图片(在线识别图片找原图情侣头像)
  • 在线识别图片(在线识别图片找原图情侣头像)
  • 在线识别图片(在线识别图片找原图情侣头像)
游戏厅所有老游戏大全(老版游戏厅)

这个答案太多了现在比较普遍的应该是:拳皇系列(97,98为主)三国战纪系列,合金弹头系列,飞机系列等等别名:暴风小子、街头风雨用MAME模拟器可以玩到KOF系列的啊,94、95、96、97、98、...

163免费邮箱入口(163免费邮箱入口官网)

手机163的登录入口163邮箱官网入口是;https://smart.mail.163.com/login.htm网易邮箱注册方法;1在浏览器搜索“网易邮箱”。2进入网易邮箱官网https://sma...

一笔签名设计免费版(设计自己的签名免费版)

  我国法律没有规定签名时要求一笔一划的写,因此,怎么签名这是公民的自由,合同方式协商一致即可。  但是,在实践中,双方当事人签合同时,建议写工整,能让他人认识签名的是谁,另外,最好在名字上按个手印,...

取消回复欢迎 发表评论: