python—读写csv文件

目录

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 csvwith 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.mzph.cn/news/869178.shtml

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

相关文章

【Notepad】Notepad_6.3.1 的中文版安装详情

目录 🌼1. Notepad的认识 🌼2. Notepad中文版安装详情 🌼1. Notepad的认识 Notepad 是 Windows 操作系统中的一个文本编辑器程序,通常用于创建和编辑简单的文本文件,如文本文档 (.txt)。它非常轻量且功能简单&#…

【本地docker启动私有大模型】

一、最终效果 中英文对话 生成代码 二、资源配置 本文选择的模型运行内存需要 4G,因此宿主机建议内存大于8G,CPU建议 6 核以上; 参考博主该mac配置可以相对流畅运行。只需要 CPU资源,不需要 GPU。 三、搭建步骤 启动docker容…

Msfvenom制作自己的专属Shell

Msfvenom制作自己的专属Shell 如何通过Msfvenom来生成用户自己的专属Shell?有时候我们上传Shell到目标主机后,不仅我们自己可以连接,其他用户也可以连接,有时候会导致我们丢失该Shell,甚至该shell被用户发现并查杀。 实验环境 …

如何在 SwiftUI 中开发定制 MapKit 功能

文章目录 介绍地图样式imagery-map 地图交互地图控件总结 介绍 在上一篇文章中,我们探讨了 SwiftUI 中新的 MapKit API 的基础知识。现在,让我们深入 MapKit API 的定制点,以便根据我们的需求定制地图呈现。 地图样式 新的 MapKit API 引入…

LabVIEW开发阀门自动校准装置

1. 装置概述与目标 在工业和实验室环境中,阀门的准确性和稳定性对于流体控制和实验数据的可靠性非常重要。LabVIEW可以作为开发阀门自动校准装置的理想工具,提供高度可定制化的解决方案。 2. 硬件与设备选择 型号选择:为了实现阀门自动校准…

这8款宝藏软件,才是安卓手机必装App!

​AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.我的日记——My Diary My Diary 是一款带锁的免费安卓日记工具。 它可用于记录每日日记、秘密想法、旅程、心情追踪或任何私人时刻。 你可…

☺初识c++(语法篇)☺

目录 一命名空间(namespace): 二cout与cin简述: 三缺省参数: 四函数重载: 五引用: 六内联函数: 七c中的nullptr简述: 一命名空间(namespace)&#xff1…

源码编译安装 LAMP

源码编译安装 LAMP Apache 网站服务基础Apache 简介安装 httpd 服务器 httpd 服务器的基本配置Web 站点的部署过程httpd.conf 配置文件 构建虚拟 Web 主机基于域名的虚拟主机基于IP 地址、基于端口的虚拟主机 MySQL 的编译安装构建 PHP 运行环境安装PHP软件包设置 LAMP 组件环境…

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

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

Vuforia AR篇(八)— AR塔防上篇

目录 前言一、设置Vuforia AR环境1. 添加AR Camera2. 设置目标图像 二、创建塔防游戏基础1. 导入素材2. 搭建场景3. 创建敌人4. 创建脚本 前言 在增强现实(AR)技术快速发展的今天,Vuforia作为一个强大的AR开发平台,为开发者提供了…

maven项目读取文件错误

开发工具:idea 一个简单的maven项目,程序读取不到src/main/resources目录下的文件 寻找了一些原因后,还是没解决,最后灵机一动改了设置居然好了。 然后就解决了

怎样把图片转成pdf文件,简鹿格式工厂轻松批量搞定

信息的存储和分享方式变得越来越多样化,而PDF文件以其跨平台兼容性和内容完整性,成为了许多用户首选的文档格式。无论是在学术研究、商务办公,还是个人创作中,将图片转换为PDF文件的需求日益凸显。 想象一下,当你需要整…

vue学习day04-计算属性、computed计算属性与methods方法、计算属性完整写法

10、计算属性 (1)概念: 基于现有的数据,计算出来的新属性。依赖于数据变化,自动重新计算。 (计算属性->可以将一段求值的代码进行封装) (2)语法: 1&a…

实现桌面动态壁纸(二)

目录 前言 一、关于 WorkerW 工作区窗口 二、关于窗口关系 2.1 窗口以及窗口隶属关系 2.2 桌面管理层窗口组分简析 2.3 厘清两个概念的区别 2.4 关于设置父窗口 三、编写代码以供在 Vista 上实现 3.1 方法二:子类化并自绘窗口背景 四、初步分析桌面管理层…

STM32的SPI接口详解

目录 1.SPI简介 2.SPI工作原理 3.SPI时序 3.1 CPOL(Clock Polarity,时钟极性): 3.2 CPHA(Clock Phase,时钟相位): 3.3 四种工作模式 4.相关代码 4.1使能片选信号 4.2使能通…

收银系统源代码-收银端UI风格

智慧新零售收银系统是一套线下线上一体化收银系统,给商户提供含线下收银称重、线上商城、精细化会员管理、ERP进销存、丰富营销活动、移动店务助手等一体化的解决方案。 如Windows版收银(exe安装包)、安卓版收银(apk安装包&#…

什么是 YAML?了解 YAML 语法与最佳实践

什么是 YAML YAML 是 "YAML Aint Markup Language" 的缩写,这是一种用于数据序列化的基于文本的标记语言。 YAML 的用途 YAML (YAML Aint Markup Language) 是一种人类可读的数据序列化格式,主要用于以下目的: 作为配置文件格式…

C++:C++入门基础|命名空间|输入输出

欢迎来到HarperLee的学习笔记! 博主主页传送门: HarperLee的博客主页! 想要一起进步的uu来后台哦! 一、什么是C? 在此之前,我们所学习的C语言是一种结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题&a…

25.无源蜂鸣器驱动设计

相对于有源蜂鸣器,无源蜂鸣器的成本更低,声音频率可控。而有源蜂鸣器因其内部 自带振荡源,只要加上适当的直流电源即可发声,程序控制较为方便。 (1)设计定义:设计一个无源蜂鸣器的驱动程序&…

二阶线性微分方程

假设一个质量 m 连接在弹簧和阻尼器上,系统受到外力 F(t) 的作用。设 x(t) 为质量的位移,系统的运动方程可以用牛顿第二定律表示为: 这是一个典型的二阶线性非齐次微分方程:其中: m 是质量(Fma&#xff09…