〖Python网络爬虫实战⑲〗- 数据存储之CSV文件

  • 订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000+ 

                python项目实战

                Python编程基础教程系列(零基础小白搬砖逆袭)

  • 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费专栏,可报销(名额有限,先到先得)

        即将转为付费专栏,更多详细请看,五一或有优惠活动哦。

关于专栏〖Python网络爬虫实战〗转为付费专栏的订阅说明

  • 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。

 最近更新

〖Python网络爬虫实战⑱〗- 数据存储之TXT纯文本

🌟上节回顾

上一节我们介绍了 Python 将我们获取到的数据保存为 TXT 文件的方法,这种方法简单易用,操作高效,是一种最基本的保存数据的方法。保存TXT文件是非常简单的。我们今天准备来介绍关于CSV文件的保存的相关知识。

⭐️CSV 文件存储

CSV是一种常用的文件格式,用于存储纯文本数据,并且每行数据都使用逗号分隔。CSV文件通常在不同的应用程序之间进行数据交换,也可以在文本编辑器中用于存储和编辑数据。

CSV文件的格式非常简单,每行数据都由逗号分隔,并且每行数据都包含标题行和数据行。标题行通常包含文件名、文件类型、记录的开始和结束位置等信息。数据行包含实际的数据数据,这些数据可以是任何类型的文本数据,例如字符串、数字、日期等。

🌟数据写入

这里先看一个最简单的例子:

import csv

with open('data.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(['id', 'name', 'age'])

在上述代码中,csv 模块的 writerow 方法用于将一行数据写入 CSV 文件。在打开文件时,使用 'w' 模式打开文件,表示以写入模式打开文件,如果文件不存在,则会创建文件。如果文件已经存在,则会将文件内容清空。

在 with 语句块中,创建一个 csv.writer 对象,并将其绑定到文件对象 f 上。然后,调用 writerow 方法将标题行写入文件。

在实际使用中,可以将数据写入 CSV 文件,每行数据之间用逗号分隔。我们运行效果如下:

✨字典写入

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

import csv

with open('data.csv', 'w') as f:
    writer = csv.DictWriter(f, fieldnames=['id', 'name', 'age'])
    writer.writeheader()
    writer.writerow({'id': '1', 'name': 'Tom', 'age': '18'})

在上述代码中,使用 csv.DictWriter 类创建一个 CSV 文件的写入器。fieldnames 参数指定了 CSV 文件中每个字段的名称。然后,调用 writeheader 方法写入标题行。最后,调用 writerow 方法将数据写入文件。这样就可以完成字典到 CSV 文件的写入了。

✨追加

如果想追加写入的话,可以修改文件的打开模式,即将 open 函数的第二个参数改成 a,代码如下:

import csv

with open('data.csv', 'a') as f:
    writer = csv.writer(f)
    writer.writerow({'id': '1', 'name': 'Tom', 'age': '18'})

这样在上面的基础上再执行这段代码,程序会在原来的csv文件的基础上,追加内容,这里和之前说的TXT的追加模式一样。

这里要注意,如果要写入中文内容的话,可能会遇到字符编码的问题,此时需要给 open 参数指定编码格式。

f = open('data.csv',mode='w',encoding='utf-8')

大家可以看到,我们这里encoding 参数指定了文件的编码方式,这里是 UTF-8。

🌟读取

✨csv

我们同样可以使用 csv 库来读取 CSV 文件。例如,将刚才写入的文件内容读取出来,相关代码如下:

import csv  

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

运行结果:

['id', 'name', 'age']
['1', 'Tom', '18']

这个代码段打开名为 data.csv 的文件,读取它的内容并将每一行打印出来。这里我们构造的是 reader 对象,通过遍历输出了每行的内容,每一行都是一个列表形式。

✨pandas

如果大家接触过 pandas 的话,我们还可以利用 read_csv 方法将数据从 CSV 中读取出来,例如:

import pandas as pd  

df = pd.read_csv('data.csv')  
print(df)

我们这个代码段导入名为 data.csv 的 CSV 文件,并将其存储在名为 df 的 Pandas DataFrame 中。然后,使用 print(df) 语句打印出 DataFrame 的内容。

🌟总结

我们了解了 CSV 文件的写入和读取方式。这也是一种常用的数据存储方式,需要熟练掌握。但是,CSV文件的使用也存在一些限制和局限性。例如,CSV文件只能存储纯文本数据,不能存储二进制数据或者复杂的数据结构。此外,CSV文件的格式比较固定,不能自定义格式或者添加数据分隔符等。

为了解决这些问题,我们需要寻找更好的数据存储方式。我们一般会使用“JSON”的数据存储格式,它可以存储多种类型的数据,并且支持自定义格式和数据分隔符等。后面我们也会讲到JSON数据的保存。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DolphinScheduler海豚调度教程

DolphinScheduler 教程 (一)入门指南 简介 关于Dolphin Apache DolphinScheduler是一个分布式易扩展的可视化DAG工作流任务调度开源系统。解决数据研发ETL 错综复杂的依赖关系,不能直观监控任务健康状态等问题。DolphinScheduler以DAG流式…

欧拉奔赴品牌2.0时代,女性汽车真实用户需求被定义?

每年的上海国际汽车工业展览会,不仅是各大汽车品牌的技术“秀场”,也是品牌的营销“修罗场”。今年上海车展出圈的营销事件特别多,热度甚至一再蔓延到汽车行业外,其中欧拉也贡献了不少流量。 据了解,在2023上海车展欧…

ModuleNotFoundError: No module named ‘mmcv._ext‘

mmsegmentation使用pyinstaller打包出现问题 mmsegmentation是商汤开源的语义分割框架,里面包含了大量SOTA模型,十分适合从事语义分割工作的小白学习。 最近想将mmsegmentation打包成exe进行使用,但是遇到了一个问题,在打包的过…

Photon AI Translator 和做产品的一些思考

近 4 个月内我一直在做 Apple 平台的产品,虽然从使用量来说「简体中文」用户是占多数,但我一直有做多语言的支持:英语、简体中文和繁体中文。习惯上 Google 翻译的我,基本上在使用 Xcode 过程中也会一直在浏览器开着 Google Trans…

目标跟踪--卡尔曼滤波 与 匈牙利算法

目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略,即基于目标检测的结果来进行目标跟踪。 跟踪结果中,每个bbox左上角的数字是用来标识某个人的唯一ID号。那么问题就来了,视频中不同时刻的同一个人,位置发生了变化&#x…

《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记

目录 一、论文摘要 1.背景 2.方法 3.结果 4.结论 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究&#xff…

【算法】冒泡排序

一.冒泡排序 主要思想: 反复交换相邻的元素,使较大的元素 逐渐冒泡到数组的末尾,从而实现排序的效果 实现过程: 1.遍历待排序数组,比较相邻的元素,如果前面的元素比后面的元素大, 就交换这两…

07 Kubernetes 网络与服务管理

课件 Kubernetes Service是一个抽象层,用于定义一组Pod的访问方式和访问策略,其作用是将一组Pod封装成一个服务,提供一个稳定的虚拟IP地址和端口号,以便于其他应用程序或服务进行访问。 以下是Kubernetes Service YAML配置文件的…

transformer and DETR

RNN 很难并行化处理 Transformer 1、Input向量x1-x4分别乘上矩阵W得到embedding向量a1-a4。 2、向量a1-a4分别乘上Wq、Wk、Wv得到不同的qi、ki、vi(i{1,2,3,4})。 3、使用q1对每个k(ki)做attention得到a1,i(i{1,2,3,4…

项目经理在项目中是什么角色?

有人说,项目经理就是一个求人的差事,你是在求人帮你做事。 有人说,项目经理就是一个与人扯皮的差事,你要不断的与开发、产品、测试等之间沟通、协调。 确实,在做项目的时候,有的人是为了完成功能&#x…

( 数组和矩阵) 769. 最多能完成排序的块 ——【Leetcode每日一题】

❓769. 最多能完成排序的块 难度:中等 给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。 我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后…

1. 先从云计算讲起

本章讲解知识点 什么是云计算? 为什么要用云计算? 物理服务器与云服务器对比 云计算服务类型 云计算部署类型 1. 什么是云计算? 云计算是一种通过计算机网络以服务的方式提供动态可伸缩的虚拟化资源的计算模式。按照服务层次分为IaaS、…

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

随着更多的公链底层面向市场,通过参与早期测试在主网上线后获得激励成为了行业的一个热点话题,在 Apots、Arbitrum One、Optimism等陆续发放了测试空投后,以 Layer3为主要特性的 Nautilus Chain 也在前不久明确表示将会有空投,引发…

ESP8266_RTOS_SDK之SPIFFS

需要在ESP8266的FLASH中存储一些可变参数,有两种方式,一种是调用SPI Flash API直接指定地址读写FLASH;二是在SPI FLASH上创建一块SPIFFS 分区,以读写文件的形式存取数据。 下面记录第二种方式,使用SPIFFS文件系统存取…

【Unity入门】20.三维向量

【Unity入门】三维向量 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)空间向量 (1)什么是三维向量 为什么会有这么一篇博客呢?主要是三维向量在unity中…

数据库之事务隔离级别详解

事务隔离级别详解 一、事务的四大特性(ACID)1. 原子性(atomicity):2. 一致性(consistency):3. 隔离性(isolation):4. 持久性(durability): 二、事务的四种隔离级别1. 读未提交(Read uncommitted)&#xff1…

吧佬联手抵制奸商,百元级游戏电脑横出江湖

最近小忆闲得在电商平台搜索了下关键词「游戏主机」,不出意外销量榜前列清一色全是「i9 级高端游戏主机」。 这些主机不论配置单介绍还是十万百万级销量宣传标语,都给人一种血赚不亏的「豪华」感。 咱就说时代在变,唯一不变的是奸商们的套路与…

指针函数和函数指针

本文目录 • 前言 • 一、返回指针的函数 二、指向函数的指针回到顶部 一、返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数&#…

「Codeforces」771-div2 E. Colorful Operations

E. Colorful Operations https://codeforces.com/contest/1638/problem/E 题目描述 给你一个数组,默认初始元素为 0 ,颜色为 1,有三种操作: Color l r c:将 [l, r] 区间内的颜色修改为 cAdd c x:将所有颜…

SpringBoot整合Minio,一篇带你入门使用Minio

本文介绍SpringBoot如何整合Minio,解决文件存储问题 文章目录 前言环境搭建项目环境搭建添加依赖库yml配置 Docker安装minio 代码实现MiniConfigservicecontroller 测试 前言 参考链接: 官网 环境搭建 项目环境搭建 将minio单独封装成一个module&am…