爬虫—文件存储—CSV存储
一,简介
CSV,全称Comma—Separated Values,可以称为逗号分隔或者字符分隔值,其文件以纯文本形式存储表格数据。该文件是一个字符序列,可以有任意的数目记录组成,记录间已某种换行符分隔。每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。相比EXcel更加简洁,就是特定字符分隔的纯文本。
二,写入CSV文件
1.简单的例子:
import csv with open('data.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(['id', 'name', 'age'])
writer.writerow(['', 'rain', ''])
writer.writerow(['', 'godric', ''])
writer.writerow(['', 'tony', ''])
运行结束后会生成一个data.csv的文件,此时数据就成功写入了。直接以文本形式打开,会显示如下内容:
id,name,age 1,rain,20 2,godric,22 3,tony,25
可以看到写入的文本默认以逗号分隔,调用一次writer()方法就会写入一行数据。使用Excel打开:
如果想要修改列与列之间的分隔符,使用delimiter参数:
# 修改分隔符
with open('data.csv', 'w') as f:
writer = csv.writer(f, delimiter="-")
writer.writerow(['id', 'name', 'age'])
writer.writerow(['', 'rain', ''])
writer.writerow(['', 'godric', ''])
writer.writerow(['', 'tony', ''])
使用纯文本格式打开:
id-name-age 1-rain-20 2-godric-22 3-tony-25
另外,writer()方法也可以多行写入,其结果是一样的:
writer.writerow(['', 'rain', ''],['', 'rain', ''],['', 'rain', ''])
2.写入字典
但是一般情况下,爬虫爬取的都是结构化数据,我们一般会用字典来表示。csv中的字典写入方式:
# 字典写入
with open('data.csv', 'w') as f:
field_name = ['id', 'name', 'age']
writer = csv.DictWriter(f, fieldnames=field_name)
writer.writeheader()
writer.writerow({'id': '', 'name': 'rain', 'age': ''})
writer.writerow({'id': '', 'name': 'godric', 'age': ''})
writer.writerow({'id': '', 'name': 'tony', 'age': ''})
这里先定义3个字段,使用field_name来表示,然后将其传给DictWriter来初始化一个字典写入对象,再使用writeheader()方法写入头信息,最后调用writerow()方法写入字典即可。结果和上面的一样。
3.追加内容
如果想要在文件后面追加内容,将open()函数的第二个参数改为a即可:
# 追加
with open('data.csv', 'a') as f:
field_name = ['id', 'name', 'age']
writer = csv.DictWriter(f, fieldnames=field_name)
writer.writeheader()
writer.writerow({'id': '', 'name': 'thor', 'age': ''})
结果如下:
id,name,age 1,rain,20 2,godric,22 3,tony,25 id,name,age 4,thor,1000
4.写入中文
如果需要写入中文信息,此时要指定编码格式,否则可能会发生编码错误。
# 中文需要指定编码
with open('data.csv', 'a', encoding='utf-8') as f:
field_name = ['id', 'name', 'age']
writer = csv.DictWriter(f, fieldnames=field_name)
writer.writeheader()
writer.writerow({'id': '', 'name': '王翔', 'age': ''})
结果如下:
id,name,age 1,rain,20 2,godric,22 3,tony,25 id,name,age 4,thor,1000 id,name,age 5,王翔,22
5.去除空行
在写入文件的时候会像上面出现多余的空行,这时候可以在open()函数内添加,一个参数来去掉多余的空行newline='',以字典写入为例:
with open('data.csv', 'w', newline='') as f:
field_name = ['id', 'name', 'age']
writer = csv.DictWriter(f, fieldnames=field_name)
writer.writeheader()
writer.writerow({'id': '', 'name': 'rain', 'age': ''})
writer.writerow({'id': '', 'name': 'godric', 'age': ''})
writer.writerow({'id': '', 'name': 'tony', 'age': ''})
结果:
['id', 'name', 'age']
['', 'rain', '']
['', 'godric', '']
['', 'tony', '']
二,读取文件
同样适用csv来读取文件。读取刚才写入的文件:
# 文件读取
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
读取结果:
['id', 'name', 'age']
['', 'rain', '']
['', 'godric', '']
['', 'tony', '']
这里我们构造了Reader对象,通过遍历输出了每一行内容,每一方都是一个列表形式。如果内容包含中文,需要指定编码。
此外,还可以使用pandas读取文件:
import pandas as pd data = pd.read_csv('data.csv')
print(data)
结果:
id name age
0 1 rain 20
1 2 godric 22
2 3 tony 25
使用pandas可以快捷的读取csv文件内容,数据分析时使用此方法较多。
爬虫—文件存储—CSV存储的更多相关文章
- 爬虫文件存储:txt文档,json文件,csv文件
5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...
- 爬虫存储介质之CSV文件存储
本文章来自度娘 CSV文件存储 CSV,全称为Comma-Separated Values,中文可以叫做逗号分隔值或字符分隔值,其文件以纯文本形式 存储表格数据.该文件是一个字符序列,可以由任意数目的 ...
- 爬虫--使用scrapy爬取糗事百科并在txt文件中持久化存储
工程目录结构 spiders下的first源码 # -*- coding: utf- -*- import scrapy from firstBlood.items import Firstblood ...
- Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)
1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...
- 爬虫--Scrapy-持久化存储操作
总体概况 持久化存储操作: a. 磁盘文件 a) 基于终端指令 i. 保证parse方法返回一个可迭代类型的对象(存储解析到的页面内容) ii. 使用终端指令完成数据存储到制定磁盘文件中的操作 1. ...
- Mysql源码分析--csv存储引擎
一直想分析下mysql的源码,开始的时候不知道从哪下手,先从csv的文件存储开始吧,这个还是比较简单的.我是用的是mysql5.7.16版本的源码. csv源码文件在mysql源码的mysql-5.7 ...
- 爬虫--Scrapy-持久化存储操作2
1.管道的高级操作 将爬取到的数据值分别存储到本地磁盘.redis数据库.mysql数据. 需求:将爬取到的数据值分别存储到本地磁盘.redis数据库.mysql数据. 1.需要在管道文件中编写对应平 ...
- (完整)爬取数据存储之TXT、JSON、CSV存储
一.文件存储 1. TXT文本存储 例:知乎发现页面,获得数据存成TXT文本 import requests from pyquery import PyQuery as pq url="h ...
- IOS数据存储之文件沙盒存储
前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...
随机推荐
- logrotate+crond日志切割、轮询
logrotate 在工作中经常会有需求去查看日志,无论是通过应用或者系统error日志去查找问题或者通过nginx的访问日志统计站点日均PV.UV.所以体现了日志的重要性,但是通常当业务越来越大的时 ...
- 多线程开发之NSThrea
创建并启动 先创建线程,再启动 // 创建 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector( ...
- n以内的素数
/* 问题描述: 质数又称素数.一个大于1的自然数,除了1和它自身外, 不能被其他自然数整除的数叫做质数: 问题分析: 素数只能被1和自身整除的数.判断一个数是不是素数, 是用2和这个数之间的所有的数 ...
- c# 属性 (get、set)
//属性是一种用于访问对象或类的特性的成员.属性可以包括字符串的长度.字体的大小.窗体的标题和客户的名称.属性是成员的自然扩展,二者都是关联类型的命名成员.namespace ConsoleAppli ...
- 爱奇艺用券付费VIP电影+python爬虫程序+可视化界面+下载本地
申明:本博客中的工具及源码仅供个人学习使用,请勿用作商业等其他任何违法用途!否则后果自负 直接步入正题吧! 工具开发环境:windows10,python3.6 工具界面设计:基于python 自带的 ...
- 从架构师视角看是否该用Kotlin做服务端开发?
前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了 ...
- 04 Unity2D
Unity2D系统是Unity引擎进行2D制作时使用的 Sprite精灵:在Unity2D制作中将图片称作精灵(Sprite),为了提高游戏效率,降低对GPU的损耗,通常将一类的图片拼接成一张大图来使 ...
- python print %s 号格式化输出
python %号格式化输出: 一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中. %s,表示格式化一个对象为字符 "%±(正负号表示)3(数字表示字符串的长度)s&quo ...
- java-正则表达式判断移动联通电信手机号
package com.linbilin.phone; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...
- fastreport小入门
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...