python—读写csv文件

news2024/11/15 10:48:18

目录

csv库方法参数

读取数据

csv.reader方法

文件指定行或列数据读取操作

txt文件的readlines、read方法

csv.DictReader方法

写入数据

txt文件的write,writelines

csv.writer方法

csv.DictWriter方法

读写联合(修改及插入数据)


读写csv 文件时,通常需要处理文件路径、打开模式、字符编码等问题。newline='' 参数通常在读写csv 文件时需要用到,可确保不会因为 Windows 系统的换行符而影响文件的读写。txt文件和csv文件之间本身支持相互转换,因此txt文件的读写等操作方法完全适用于csv文件。

csv库方法参数

参数默认值描述
delimiter,它是指用于分隔 CSV 文件中的值(或字段)的字符。
skipinitialspaceFALSE它控制定界符后面的空格的解释方式。 如果为True,则将删除初始空格。
lineterminator\r\n它是指用于终止行的字符序列。
quotechar"它指的是如果字段中出现特殊字符(如定界符),则将用于引用值的单个字符串。如对于“0,0”中包含”,“的情况,可以使用quotechar="\"" 将”“内的数据作为一个整体,使用‘0,0’则将quotechar="'"即可
quotingcsv.QUOTE_NONE控制引号由作者生成或由读者识别的时间(其他选项请参见上文)。
escapecharNone引用设置为引号时,它用于转义定界符的一字符字符串。
doublequoteTRUE控制字段内引号的处理。 True时,在读取期间将两个连续的引号解释为一个,而在写入时,将嵌入数据中的每个引号字符写入为两个引号。默认情况下,doublequote设置为True。 结果,在读取两个连续的双引号时会被解释为一个。如果将doublequote设置为False,则连续的双引号将出现在输出中。

读取数据

csv.reader方法

import csv

with open(file_name, 'r', encoding='utf-8-sig') as f: 
    reader = csv.reader(f)  # 创建csv阅读器对象,读取所有有效数据,返回结果为一个迭代器类对象
    for data in reader:  # 遍历每一行的数据
        print(data)

encoding可指定编码格式为utf-8-sig ,这样可自动处理BOM字符,消除\ufeff的出现.

文件指定行或列数据读取操作
with open(file_name, 'r', encoding='utf-8-sig') as f: 
    reader = csv.reader(f) 
    list_csv = list(reader)
    for i in range(len(list_csv)-5,len(list_csv)):  # 如读取后5行数据
        print(list_csv[i])
        print(list_csv[i][:3])   # 读取指定列数据

txt文件的readlines、read方法

使用txt文件的读取方式readlines()、read(),读取数据中有换行符需要处理。不需要导入csv库

with open(file_name, 'r', encoding='utf-8-sig') as f:

    reader_lines = f.readlines() # 读取所有行放在一个列表中
    for da in reader_lines:  # 也可以使用range方法读取指定行的数据,读取结果中有换行符需要处理
        print(da.replace('\n',''))

    reader = f.read()
    print(reader)

csv.DictReader方法

以字典形式读取数据,打印出的数据为字典键值对形式的数据。

with open(file_name,'r', encoding='utf-8-sig',newline='') as f:
    reader =csv.DictReader(f)
    for r in reader:
        print(r)

写入数据

txt文件的write,writelines

无需要导入csv库

使用txt文件的write,writelines 写入数据,在使用时将字符中的英文逗号识别为横向制表符tab,将换行符识别为纵向制表符enter进行换行。如果要插入空行,写入数据参数用换行符,如果写入空的单元格,写入数据参数为英文逗号。

    with open(file_name, 'w', newline='') as f:
        f.write('测试写入数据操作\n')
        f.write('\n')
        f.writelines(["角色管理,测试测试", "账号管理\n", "部门管理\n"])

  

csv.writer方法

写入数据时接受一个变量可以是字符串,列表,元组,集合,字典等可遍历的对象[字符串会将每个字符分开填入到单元格,字典将key遍历写入]。writerow单行数据写入、writerows多行数据写入。

    with open(file_name, 'w', newline='') as f:
        ws = csv.writer(f)  # 创建一个写入文件对象
        ws.writerow([])  # 列表内容为空,插入的是一个空行
        ws.writerow(["设备实时监控", "设备数据列表", "设备报警分析"])  # 列表数据
        ws.writerow(("角色管理", "账号管理", "部门管理"))  # 元组数据

        write_data = ['贾史王薛',
                      ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
                       '丰年好大雪,珍珠如土金如铁'], ('cao', 'xue', 'qin', 'shu'), {'曹', '雪', '芹', '书'},
                      {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'},
                      {'贾': '宝玉', '史': '湘云', '王': '熙凤', '薛': '宝钗'}.values()]
        ws.writerows(write_data)  # writerows写入多行数据

csv.DictWriter方法

DictWriter写入数据时需要根据字典key判断 key是否在fieldnames中,不存在会报错,如果需要添加所有已知及未知字典数据,可以先读取需要写入的数据所有key,进行和原文件表头对比(读取原文件表头),将其加入表头列表中再写入数据。

fieldnames = ['姓氏', '人物', '说明']  # 表头
dictate = [{'姓氏': '贾', '人物': "宝玉"}, {'姓氏': '史', '人物': "湘云"}, {'姓氏': '王', '人物': "熙凤"},
           {'姓氏': '薛', '人物': "宝钗"}]
with open(file_name, 'w', newline='') as f:
    write = csv.DictWriter(f, fieldnames=fieldnames, delimiter=',')  
    write.writeheader()  # 写入表头
    write.writerow({'姓氏': '贾', '人物': "宝玉"})  # 单行模式写入
    write.writerows(dictate)  # 多行模式写入

读写联合(修改及插入数据)

原理:先读取原文件数据,转列表存储,再获取的列表基础上使用列表方法做增删等操作,最后将修改后的列表数据采用多行写入的方式写入到文件中。

    # 第一步:读取数据
    with open(file_name, 'r+', newline='') as f:
        file_csv_data = list(csv.reader(f))

    # 第二步:操作数据
    # 插入数据
    file_csv_data.insert(2, '贾史王薛')  # 在某行插入一行数据,如在第3行插入数据
    file_csv_data[2].insert(0, '红楼四大家族')  # 在指定单元格插入数据,如在3行1列的单元格插入数据

    # 修改数据
    file_csv_data[2] = ['贾不假,白玉为堂金作马', '阿房宫,三百里,住不下金陵一个史', '东海缺少白玉床,龙王请来金陵王',
                        '丰年好大雪,珍珠如土金如铁', '']  # 修改指定行一行数据
    file_csv_data[2][4] = '葫芦僧判葫芦案'  # 修改某一单元格数据,如修改3行5列数据

    # 修改符合条件的数据数据
    # 修改符合要求的单元格数据:通过for循环遍历判断,例如修改单元格中包含1的数据,将1替换成一
    # for r_id, row in enumerate(file_csv_data):  # 通过行号列号修改
    #     for c_id, col in enumerate(row):
    #         if '1' in col:
    #             file_csv_data[r_id][c_id] = col.replace('1', '一')

    for row in file_csv_data:  # 通过行数据及列号修改,比上面更方便
        for c_id, col in enumerate(row):
            if '1' in col:
                row[c_id] = col.replace('1', '一')

    # 第三步:写入报存数据
    with open(file_name, 'w', newline='') as f:
        write_file = csv.writer(f)
        write_file.writerows(file_csv_data)

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

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

相关文章

语义言语流畅性的功能连接和有效连接

摘要 语义言语流畅性(SVF)受损在多种神经系统疾病中都存在。虽然已经报道了SVF相关区域的激活情况,但这些区域如何相互连接以及它们在脑网络中的功能作用仍存在分歧。本研究使用功能磁共振成像评估了健康被试SVF静态和动态功能连接(FC)以及有效连接。观察到额下回(…

c++初阶学习----入门(上)

大家好啊。最近学习了一点关于c的知识。这不就迫不及待的来与大家分享了嘛。但我这也是现学现卖所以咧。有很多遗落甚至不对的地方希望大家可以在评论区里面指出来。这样也可以增加大家对知识的巩固。 c语言与c的联系 不知道大家看到c会不会不由自主的联想到C语言啊。毕竟都是…

TVBox的Json配置接口编写指南,模板格式说明(如何打造一个专属于自己的TVBox配置文件)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 配置解析 📒📝 JSON基础📝 配置文件结构/参数说明📝 编写步骤📝 注意事项🎈 接口分享⚓️ 相关链接 ⚓️📖 介绍 📖 TVBox 是一款备受欢迎的电视盒子应用(免费影视必备),它以其高度自定义的特性深受用户喜爱…

Pearson 相关系数的可视化辅助判断和怎么用

Pearson 相关系数的可视化辅助判断和怎么用 flyfish Pearson 相关系数 是一种用于衡量两个连续型变量之间线性相关程度的统计量。其定义为两个变量协方差与标准差的乘积的比值。公式如下: r ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i −…

jitsi 使用JWT验证用户身份

前言 Jitsi Meet是一个很棒的会议系统,但是默认他运行所有人创建会议,这样在某种程度上,我们会觉得他不安全,下面我们就来介绍下使用JWT来验证用户身份 方案 卸载旧的lua依赖性sudo apt-get purge lua5.1 liblua5.1-0 liblua5.1-dev luarocks添加ubuntu的依赖源,有则不需…

AI时代算法面试:揭秘高频算法问题与解答策略

三种决策树算法的特点和区别 ID3算法:基本的决策树算法,适用于简单的分类问题C4.5算法:改进了ID3算法,适用于更复杂的分类问题,可以处理连续型数据和缺失值CART算法:更加通用的决策树算法,适用于…

住宅代理、移动代理和数据中心代理之间的区别

如果您是一名认真的互联网用户,可能需要反复访问某个网站或服务器,可能是为了数据抓取、价格比较、SEO 监控等用例,而不会被 IP 列入黑名单或被 CAPTCHA 阻止。 代理的工作原理是将所有传出数据发送到代理服务器,然后代理服务器将…

用LangGraph、 Ollama,构建个人的 AI Agent

如果你还记得今年的 Google I/O大会,你肯定注意到了他们今年发布的 Astra,一个人工智能体(AI Agent)。事实上,目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体(AI …

VBA实现Excel的数据透视表

前言 本节会介绍通过VBA的PivotCaches.Create方法实现Excel创建新的数据透视表、修改原有的数据透视表的数据源以及刷新数据透视表内容。 本节测试内容以下表信息为例 1、创建数据透视表 语法:PivotCaches.Create(SourceType, [SourceData], [Version]) 说明&am…

面对数据不一致性的解决方案:

polarDB是读写分离和计算存储分离的分布式数据库,并且副本的log replicate是基于Parallel-Raft协议来实现的。所以在瞬时进行写和读的操作时,是不可避免会存在数据一致性问题,导致这个数据一致性问题的原因不是事务,而是多副本日志…

【考研数学】李林《880题》25版听说大改版?和和24版差别大吗?

25版和24版总体差别不大,只有小部分内容有所变动! 拓展题部分的更新:25版在拓展题部分进行了一些更新,从李林的模拟题中挑选了大约40道题目添加到新版中。 高等数学:变动主要集中在前三章,但具体的题目变…

【C++】开源:坐标转换和大地测量GeographicLib库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍坐标转换和大地测量GeographicLib库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关…

Facebook社交平台的未来发展趋势分析

随着科技和社交需求的不断演变,Facebook作为全球最大的社交平台之一,其未来发展的趋势备受关注。从技术创新到社会影响,Facebook正在经历着前所未有的变化和挑战。本文将探讨Facebook未来发展的几个关键趋势,并分析其可能的影响和…

SpringBoot 实现视频分段播放(通过进度条来加载视频)

需求:现在我本地电脑中有一个文件夹,文件夹中都是视频,需要实现视频播放的功能。 问题:如果通过类似 SpringBoot static 文件夹的方式来实现,客户端要下载好完整的视频之后才可以播放,并且服务端也会占用大…

Androidstudio开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源:和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

用Vue3和Plotly.js绘制交互式3D散点图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Plotly.js 创建 2D 密度图 应用场景介绍 密度图是一种可视化数据分布的图表,它显示了数据点的密度在不同区域的变化情况。在许多科学和工程领域中,密度图被广泛用于探索和分析数据…

java项目总结数据库

1.什么是数据库 用于存储和管理数据的仓库 2.数据库的特点 1.持久化存储数据。确实数据库就是一个文件系统。 2.便于存储和管理数据 3.使用统一的方式操作数据库 --SQL 3.MqSql服务启动 4.登录和退出 这里的ip值IP地址 5.客户端与服务器关系 6.目录结构 7.SQL 1.什么是SQL&…

AI赋能OFFICE 智能化办公利器!

ONLYOFFICE在线编辑器的最新版本8.1已经发布,整个套件带来了30多个新功能和432个bug修复。这个文档编辑器无疑成为了办公软件中的翘楚。它不仅支持处理文本文档、电子表格、演示文稿、可填写的表单和PDF,还允许多人在线协作,并支持AI集成&…

10、Python之写出更加Pythonic的代码:unpacking拆包机制

引言 有些小伙伴有其他编程语言的学习、使用的经验,然后迁移到Python。一般会比完全的新手小白,更快速地把Python用起来。这是他们的优势,但也是他们的劣势。 之所以这么说,是因为从其他编程语言带过来的,除了相通的编…

多模态:Nougat详解

文章目录 前言一、模型结构1. encoder2. decoder3. set 二、数据增强三、数据splitting the pages 四、实验评估repetitions during inference 五、代码1. 环境安装2. Dataset(dataset.py)3. Model(model.py) 总结 前言 科学知识…