Python-CSV文件的存储

CSV文件存储

  CSV其文件以纯文本形式存储表格数据。CSV文件是一个字符序列,可以由任意数目的记录组成,各种记录由某种换行符分隔开。它比Excel文件更加简洁,XLS文本是电子表格,包含文本、数值、公式和格式等内容,CSV中则不包含这些,就是以特定字符作为分隔符的纯文本,结构简单清晰,所以有时候使用CSV来存储数据是比较方便的。

1.写入

import csvwith open('data.csv','w') as csvfile:writer = csv.writer(csvfile)writer.writerow(['id','name','age'])writer.writerow(['10001','Mike',20])writer.writerow(['10002','Bob',21])writer.writerow(['10003','Jered',22])

  这里首先打开data.csv文件,指定打开模式w写入,获得文件句柄,随后调用csv库的writer方法初始化写入对象,传入该句柄,然后用writerow方法传入每行的数据。
  运行结束后会生成一个名为data.csv的文件,打开如图所示。
在这里插入图片描述
  这时候如果直接打印输出会发现分隔符这时是默认的以逗号分隔,如果想修改列与列之间的分隔符,可以传入delimiter参数。

import csvwith open('data.csv','w') as csvfile:writer = csv.writer(csvfile,delimiter=' ')writer.writerow(['id','name','age'])writer.writerow(['10001','Mike',20])writer.writerow(['10002','Bob',21])writer.writerow(['10003','Jered',22])

  这时就会发现列于列之间的分隔符已经变成了空格。
  另外我们也可以调用writerows方法同时写入多行,此时参数需要传入二维列表。

import csvwith open('data.csv','w') as csvfile:writer = csv.writer(csvfile)writer.writerow(['id','name','age'])writer.writerows([['10001','Mike',20],['10002','Bob',21],['10003','Jered',22]])

  但是,在一般情况下爬虫爬取的数据都是结构化数据,我们一般会用字典表示。csv库也提供了字典的写入方式。

import csvwith open('data.csv','w') as csvfile:filednames = ['id','name','age']writer = csv.DictWriter(csvfile,fieldnames=filednames)writer.writeheader()writer.writerow({'id':'10001','name':'Mike','age':20})writer.writerow({'id':'10002','name':'Bob','age':21})writer.writerow({'id':'10003','name':'Jared','age':22})

  这里定义了三个字段,用filedname表示,然后传给DictWriter方法以初始化一个字典写入对象,并赋值给writer变量。接着用writeheader方法先写入头信息,再调用writerow方法传入相应字典。
  另外,如果想要追加写入,可以修改文件的打开模式,即把open函数的第二个参数改成a,代码如下:

import csvwith open('data.csv','a') as csvfile:filednames = ['id','name','age']writer = csv.DictWriter(csvfile,fieldnames=filednames)writer.writerow({'id':'10004','name':'Lan','age':25})

  这样数据就会被追加写入到文件中。
  如果要写入中文内容,可能会遇到编码的问题,我们可以给open指定编码格式。

import csvwith open('data.csv','a',encoding='utf-8') as csvfile:filednames = ['id','name','age']writer = csv.DictWriter(csvfile,fieldnames=filednames)writer.writerow({'id':'10004','name':'王伟','age':25})

  如果接触过pandas库,可以调用DataFrame对象的to_csv方法将数据写入到CSV文件中。

import pandas as pddata = [{'id':'10004','name':'王伟','age':25},{'id':'10002','name':'Bob','age':21},{'id':'10003','name':'Jared','age':22}
]df = pd.DataFrame(data)
df.to_csv('data.csv',index=False)

  我定义了几个字典数据,组成列表,赋值给data。用pandas的DataFrame类新建了一个DataFrame对象,参数传入data,最后调用df的to_csv方法将数据保存为CSV文件

2.读取

  我们同样可以使用csv库来读取文件。例如,把上面写入的文件读取出来。

mport csvwith open('data.csv','r',encoding='utf-8') as csvfile:reader = csv.reader(csvfile)for row in reader:print(row)

  运行结果如下:

[‘id’, ‘name’, ‘age’]
[‘10004’, ‘王伟’, ‘25’]
[‘10002’, ‘Bob’, ‘21’]
[‘10003’, ‘Jared’, ‘22’]

  另外也可以使用pandas的read_csv方法读取数据。

import pandas as pddf = pd.read_csv('data.csv')
print(df)

  运行结果如下:

id name age
0 10004 王伟 25
1 10002 Bob 21
2 10003 Jared 22

  这里的df实际为DataFrame对象,如果只想读取文件中的数据,可以进一步将df转化为列表或者元组。

import pandas as pddf = pd.read_csv('data.csv')
data = df.values.tolist()
print(data)

  这里调用了df的values属性,再调用tolist方法转化为列表,运行结果如下:

[[10004, ‘王伟’, 25], [10002, ‘Bob’, 21], [10003, ‘Jared’, 22]]

  另外直接对df进行遍历,也能达到列表类型的结果。

import pandas as pddf = pd.read_csv('data.csv')
for index,row in df.iterrows():print(row.tolist())

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

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

相关文章

Linux系统使用超详细(六)~进程管理

目录 一、认识进程 二、进程号 2.1.进程号概念 2.2.进程号作用 三、进程查看 3.1. ps命令: 3.2. top命令: 3.3. htop命令: 3.4. pstree命令: 3.5. pgrep命令: 四、进程状态 五、进程优先级 六、进程优先…

neo4j图数据库安装和测试

neo4j图数据库安装和测试 1. 下载合适的neo4j软件版本。 https://we-yun.com/doc/neo4j/ https://neo4j.com/deployment-center/#enterprise 2. 下载JAVAJDK 由于neo4j是一个用Java编写的图形数据库,因此在安装和运行Neo4j之前,需要先安装Java Developm…

真机调试HarmonyOS应用报错

问题表现: 01/04 19:00:01: Launching com.example.simplevideo $ hdc shell am force-stop com.example.simplevideo $ hdc shell bm uninstall com.example.simplevideo $ hdc file send E:\harmony\SimpleVideo\entry\build\default\outputs\default\entry-defau…

docker (portainer 安装nginx)

汉化版步骤可以参考:写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/135258056 一、创建容器 二、配置端口,以及容器卷挂载 挂载目录配置:(下方截图的目录如下,docker 改为 mydocker,用docker作为根…

使用KVM命令集管理虚拟机

1、KVM基本功能管理 1)查看命令帮助 [rootlocalhost ~]# virsh -h ......//省略输出内容 2)查看KVM的配置文件存放目录(rhel7.1是虚拟机系统实例的配置文件) [rootlocalhost ~]# ls /etc/libvirt/qemu autostart networks r…

《设计模式》之策略模式

策略模式定义 比如对象的某个行为,在不同场景有不同实现方式,可以将这些行为的具体实现定义为一组策略,每个实现类实现种策略,在不同场景使用不同的实现,并且可以自由切换策略。 策略模式结构 策略模式需要一个策略…

react antd,echarts全景视图

1.公告滚动,40s更新一次 2.echarts图标 左右轮播 60s更新一次 3.table 表格 import { useState, useEffect } from react;import Slider from react-slick; import slick-carousel/slick/slick-theme.css; import slick-carousel/slick/slick.css;import Layout fro…

WiFi7: MLD寻址

原文:MLD使用MLD MAC address唯一的标识本MLD。 MLD下的STA(s)使用与之不同的MAC address。 NOTE MLD MAC address可以和其下的某个STA的MAC address相同或者不同于任一MAC Address。 原文:对于individually addressed 帧。以下规则适用: Address 2(TA)设置为STA的MAC Add…

springboot项目 java -jar xxx.jar 没有主清单属性解决方法

1.在pom文件中添加如下 <plugins><!--解决SpringBoot打包成jar后运行提示没有主清单属性--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork…

python 堆栈

栈&#xff08;Stack&#xff09;&#xff1a; 栈是一种后进先出&#xff08;LIFO&#xff09;的数据结构&#xff0c;意味着最后进入栈的元素将首先被取出。栈通常用于存储局部变量、函数调用等信息&#xff0c;这些信息在程序运行时动态生成和销毁。栈的大小在程序编译时就已…

Hive实战:实现数据去重

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、基于HDFS数据文件创建Hive外部表4、利用Hive SQL实…

el-autocomplete远程搜索使用及el-upload上传多个文件流给后端,详情接口返回的是文件地址,前端将文件地址转成文件流,回传文件流给后端

最近遇到一个项目,里面有2个需求我觉得挺常见的,第一个需求是一个表单里,当用户在输入名称后,前端调接口发请求获取到关联名称的企业名称,并展示,然后当用户选中企业后,前端调接口获取选中企业的具体信息,并填充到表单里;第二个需求是,表单里有个上传图片的功能,前端…

什么是React.FC | 封装ant design弹框组件之:ant design 修改密码弹框组件

文章目录 一、什么是React.FC组件的 props 是什么意思二、封装ant design弹框组件之:ant design 修改密码弹框组件定义修改密码弹框组件使用修改密码弹框组件:[重要]关于提交时候,不同组件 表单数据共享报错:Button cannot be used as a JSX component.一、什么是React.FC …

JVS规则引擎和智能BI(自助式数据分析)1.3新增功能说明

规则引擎更新功能 新增: 1、数据源新增Excel数据源&#xff1b; Excel数据源功能允许用户将Excel文件作为数据源导入&#xff0c;并进行数据清洗、转换和处理&#xff0c;以实现数据的集成、可视化和深度分析&#xff0c;为决策提供强大支持&#xff0c;同时保持良好的交互性…

新一代爬取JavaScript渲染页面的利器-playwright(一)

Playwright的使用 Playwright是微软在2020年初开源的一款新一代自动化测试工具&#xff0c;其功能和**Selenium**、Pyppeteer类似&#xff0c;都可以驱动浏览器进行自动化操作&#xff0c;但是也具备了Selenium、Pyppeteer不具备的更好的API&#xff0c;是新一代爬取JavaScrip渲…

HbuilderX中的git的使用

原文链接https://blog.csdn.net/Aom_yt/article/details/119924356

CentOs 环境下使用 Docker 部署 Ruoyi-Vue

CentOs 环境下使用 Docker 部署 Ruoyi-Vue RuoYi-Vue 项目下载地址 RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 (gitee.com) Docker 部…

MYSQL分表容量预估:简明指南

随着数据量的日益增长&#xff0c;分表技术成为优化mysql数据库性能的重要策略。本文介绍一种简明有效的预估分表容量大小的方法&#xff0c;帮助开发者和数据库管理员进行有效的资源规划。 背景 在处理大规模数据时&#xff0c;为了优化性能和管理便利&#xff0c;常常采用分…

Java 流程控制语句

程序设计中规定的三种流程结构&#xff0c;即&#xff1a; 顺序结构 程序从上到下逐行地执行&#xff0c;中间没有任何判断和跳转 分支结构 根据条件&#xff0c;选择性地执行某段代码 有 if…else 和 switch-case 两种分支语句 循环结构 根据循环条件&#xff0c;重复性的执…

DRF从入门到精通九(权限控制)

文章目录 一、权限控制模型1) ACL(Access Control List,访问控制列表)2) RBAC(Role-Based Access Control,基于角色的访问控制)应用前后台权限控制实操 3) ABAC(Attribute-Based Access Control,基于属性的访问控制) 一、权限控制模型 1) ACL(Access Control List,访问控制列表…