Python-CSV文件的存储

news2024/11/26 23:48:55

CSV文件存储

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

1.写入

import csv

with 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 csv

with 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 csv

with 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 csv

with 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 csv

with 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 csv

with 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 pd

data = [
    {'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 csv

with 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 pd

df = 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 pd

df = 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 pd

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

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

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

相关文章

Qt中图片旋转缩放操作

在我们开发过程中,难免会遇到加载图片的问题,在上一个开发项目里我就遇到了图片缩放的问题,所以,我决定将这一部分好好研究,记录下来,希望对大家有帮助哟~ 在讲解之前,我们先看一看具体的展示效…

docker 部署来自Hugging Face下机器翻译模型

机器翻译模型(Hugging Face官网) 模型翻译api服务代码 # 离线翻译服务代码 # -*-coding:utf-8-*-import os import json import logging from logging.handlers import RotatingFileHandler from datetime import datetime from flask import Flask, request,jsonify from geve…

【LMM 009】MiniGPT-4:使用 Vicuna 增强视觉语言理解能力的多模态大模型

论文描述:MiniGPT-4: Enhancing Vision-Language Understanding with Advanced Large Language Models 论文作者:Deyao Zhu∗ Jun Chen∗ Xiaoqian Shen Xiang Li Mohamed Elhoseiny 作者单位:King Abdullah University of Science and Techn…

2023-我的CSDN创作之旅

1.博客内容与数量 2023年共发表博客59篇,内容主要集中在GIS,空间分析等领域 主要内容有: networkx学习 Geospatial Data Science Geocomputation ESDA in PySal SHAP Spatial Data Analysis BikeDNA 以下是对这几个章节主要内容的简…

行业模型与场景落地新样本,网易有道发布多款“子曰”教育大模型落地应用与产品

距离2023年7月正式发布教育大模型“子曰”不到半年时间,教育科技公司网易有道近日再次分享了“子曰”教育大模型创新和落地成果,宣布推出国内首个教育大模型“子曰”2.0版本,同时还发布了基于大模型研发的三大创新应用——AI家庭教师“小P老师…

快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法, 附带应用脚本

介绍 viralcc是一个基因组病毒分析工具,可以用于快速、准确地检测和分类病毒序列。 github:dyxstat/ViralCC: ViralCC: leveraging metagenomic proximity-ligation to retrieve complete viral genomes (github.com) Instruction of reproducing resul…

Gin 项目引入热加载

Gin 项目引入热加载 文章目录 Gin 项目引入热加载一、什么是热加载二、Air2.1 介绍2.2 特性特性:2.3 相关文档2.4 安装推荐使用 install.sh使用 go install 2.5 配置环境变量2.6 使用 三、Fresh3.1 介绍3.2 相关文档3.3 安装与使用 四、bee4.1 介绍4.2 相关文档4.3 …

2024年PMP考试新考纲-【人员领域】真题解析(3)

今天华研荟继续为您分享PMP新考纲下的【人员People领域】近年真题,帮助大家举一反三,一次性通过2024年的PMP考试。 这两天有读者朋友和我探讨,做机构提供的模拟题是否有必要。华研荟的态度是:完全没必要,做模拟题是浪费…

学而时习之---状态模式

在软件系统中,有些对象也像水一样具有多种状态, 这些状态在某些情况下能够相互转换, 而且对象在不同的状态下具有不同的行为。 为了更好地对这些具有多种状态的对象进行设计。 使用一种被称为状态模式的设计模式。 状态模式用于解决系统中复…

天翼云搭建CUDA开发环境综合教程

一、英伟达环境安装主要流程 1、下载安装对应系统版本nVidia驱动程序安装验证 2、CUDA开发套件安装验证 3、深度学习框架安装验证 4、容器化CUDA环境安装验证 5、制作天翼云主机私有镜像 6、分享镜像给其他用户,实现天翼云A10显卡英伟达驱动环境共享 二、详细…

01第一个Mybatis程序+引入Junit+引入日志文件logback

Mybatis MyBatis本质上就是对JDBC的封装,通过MyBatis完成CRUD。而对于JDBC,SQL语句写死在Java程序中,不灵活。改SQL的话就要改Java代码。违背开闭原则OCP。对于事务机制,MyBatis支持 或managed模式,JDBC模式中MyBatis…

element-ui Tree 树形控件 过滤保留子级并获取过滤后的数据 多选改单选

本示例基于vue2 element-ui element-ui 的官网demo是只保留到过滤值一级的,并不会保留其子级 目标 1、Tree 树形控件 保留过滤值的子级 2、在第一次过滤数据的基础上进行第二次过滤 3、Tree 树形控件 多选改为单选,且只有最末端子级可以选择 不足…

「解析」Windows 如何优雅使用 Terminal

所谓工欲善其事必先利其器,对于开发人员 Linux可能是首选,但是在家学习的时候,我还是更喜欢使用 Windows系统,首先是稳定,其次是习惯了。当然了,我还有一台专门安装 Linux系统的小主机用于学习Linux使用&am…

八、QLayout 用户基本资料修改(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 在很多应用程序中会有用户注册或用户编辑信息等界面。本文就设计一个用户信息编辑界面。要求包含用户名、姓名、性别、部门、年龄、头像、个人说明等信息。 二、实现代码 #ifndef DIALOG_H #define D…

MySQL数据管理(一)

一、列类型 列类型指规定数据库中该列存放的数据类型 列类型分类 数值类型字符串类型日期和时间型数值类型 数值类型 字符串类型 日期和时间类型 MySQL允许“不严格”语法,任何标点符号都可以作为日期部分之间的间隔符,如“24-01-03”、“24.01.03”…

第二百四十五

我们在上一章回中介绍了"修改页面导航中遇到的问题"沉浸式状态样相关的内容,本章回中将介绍如何修改Avatar的大小.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在正常使用CirCleAvatar组件时可以通过该组件的radius属性来修改它的…

Git 对项目更新的时候提示错误 repository not owned by current user

遇到 Git 提示的错误信息为:repository not owned by current user 上图显示的是错误的信息。 问题和解决 出现上面错误信息的原因是当前文件夹的权限和 Git 的执行权限不一直导致的。 我们的问题是我们希望在网盘上使用 Git 更新克隆后的代码,但登录…

KeyError: ‘model_state_dict‘

问题 加载模型权重文件时获取model_state_dict键失败 解决 单步调试发现保存模型权重时正确保存了该键值对,再次调试时发现莫名奇妙又没错了 首先确认保存模型时的状态字典键名:确保在保存模型权重时,正确地使用了 model.state_dict() 方法…

机器学习原理到Python代码实现之LinearRegression

Linear Regression 线性回归模型 该文章作为机器学习的第一篇文章,主要介绍线性回归模型的原理和实现方法。 更多相关工作请参考:Github 算法介绍 线性回归模型是一种常见的机器学习模型,用于预测一个连续的目标变量(也称为响应变…

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

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