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…

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

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

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

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

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 部…

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,访问控制列表…

郑州大学算法设计与分析实验2

判断题 1 #include<bits/stdc.h> using namespace std;const int N 50; int f[N], n;int main() { // freopen("1.in", "r", stdin);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n;f[1] 1; f[2] 1;for(int i 3; i &l…

ARM Cortex-Mx 权威指南笔记

用于中断或异常屏蔽特殊寄存器细节 1、PRIMASK 在许多应用中,可能都需要暂时禁止所有中断以执行一些时序关键的任务&#xff0c;此时可以使用PRIMASK寄存器。PRIMASK寄存器只能在特权状态访问。PRIMASK 用于禁止除NMI和 HardFault 外的所有异常它实际上是将当前优先级改为0(最…

图解设计模式-中介者模式(Mediator)

中介者模式 定义 使用一个中介者对象&#xff08;mediator&#xff09;集中封装多个具有依赖/关联关系的对象&#xff08;colleague&#xff0c;同事对象&#xff09;之间的交互&#xff0c;使各对象之间不再互相引用&#xff0c;降低对象之间的强耦合程度&#xff0c;对象之…

CTF之Misc杂项干货

目录 一、常见编码 二、文件分析与处理 三、隐写工具与命令 四、隐写术实例 一、常见编码 1、base家族 2、进制转换 3、摩斯、希尔、凯撒、仿射、栏栅、维吉尼亚、培根、键盘、rabbit、rot13、AES、md5、RSA等 &#xff08;md5、RSA可能不会出现在杂项里&#xff0c;但…

pytorch集智-1安装与简单使用

1 安装 1.1 简介 pytorch可用gpu加速&#xff0c;也可以不加速。gpu加速是通过cuda来实现&#xff0c;cuda是nvidia推出的一款运算平台&#xff0c;它可以利用gpu提升运算性能。 所以如果要装带加速的pytorch&#xff0c;需要先装cuda&#xff0c;再装pytorch&#xff0c;如…