一,简介  

    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存储的更多相关文章

  1. 爬虫文件存储:txt文档,json文件,csv文件

    5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...

  2. 爬虫存储介质之CSV文件存储

    本文章来自度娘 CSV文件存储 CSV,全称为Comma-Separated Values,中文可以叫做逗号分隔值或字符分隔值,其文件以纯文本形式 存储表格数据.该文件是一个字符序列,可以由任意数目的 ...

  3. 爬虫--使用scrapy爬取糗事百科并在txt文件中持久化存储

    工程目录结构 spiders下的first源码 # -*- coding: utf- -*- import scrapy from firstBlood.items import Firstblood ...

  4. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  5. 爬虫--Scrapy-持久化存储操作

    总体概况 持久化存储操作: a. 磁盘文件 a) 基于终端指令 i. 保证parse方法返回一个可迭代类型的对象(存储解析到的页面内容) ii. 使用终端指令完成数据存储到制定磁盘文件中的操作 1. ...

  6. Mysql源码分析--csv存储引擎

    一直想分析下mysql的源码,开始的时候不知道从哪下手,先从csv的文件存储开始吧,这个还是比较简单的.我是用的是mysql5.7.16版本的源码. csv源码文件在mysql源码的mysql-5.7 ...

  7. 爬虫--Scrapy-持久化存储操作2

    1.管道的高级操作 将爬取到的数据值分别存储到本地磁盘.redis数据库.mysql数据. 需求:将爬取到的数据值分别存储到本地磁盘.redis数据库.mysql数据. 1.需要在管道文件中编写对应平 ...

  8. (完整)爬取数据存储之TXT、JSON、CSV存储

    一.文件存储 1. TXT文本存储 例:知乎发现页面,获得数据存成TXT文本 import requests from pyquery import PyQuery as pq url="h ...

  9. IOS数据存储之文件沙盒存储

    前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...

随机推荐

  1. python里的文件I/O

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  2. WOJ 1538 Stones II 转化背包问题

    昨天是我负责这个题目的,最后没搞出来,真的给队伍拖后腿了. 当时都推出来了 我假设最后结果是取了m个物品,则我把这个m个物品按取的先后编号为 k1 k2 k3 k4...km 则最终结果就是 (k1. ...

  3. 沙龙报名 | 京东云DevOps——自动化运维技术实践

    随着互联网技术的发展,越来越多企业开始认识DevOps重要性,在企业内部推进实施DevOps,期望获得更好的软件质量,缩短软件开发生命周期,提高服务稳定性.但在DevOps 的实施与落地的过程中,或多 ...

  4. CYPHER 语句(Neo4j)

    CYPHER 语句(Neo4j) 创建电影关系图 新增 查找 修改 删除 导入 格式转换 创建电影关系图 CREATE (TheMatrix:Movie {title:'The Matrix', re ...

  5. JAVA课程设计——俄罗斯方块

    0.负责模块为可视化界面,技术栈为 (1)异常处理 (2)多线程 (3)文件存储 (4)Java swing 1.登陆界面 我的代码 import java.awt.Color; import jav ...

  6. Access修改窗体的名称,用于VBA代码的调用

  7. 多种类型SQL注入

    前言 发现MYSQL手注注入方式用得多了,几乎都快忘记其它数据库注入的方式了,这里不讲绕过姿势和写shell,毕竟网上很多前辈都给了方法,我只讲一些基本的注入方式(只是记录一下各自的特性,记下来方便以 ...

  8. UML的用例图

    1.概念理解 (1)用例图是UML多种图形语言的一种,最能体现系统结构,直观展现系统功能模块模型 (2)用例图用于描述用户与用例(角色与功能模块)之间的关联关系 (3)常用Power Designer ...

  9. css3 flex布局详解

    原文链接: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool https://www.cnblog ...

  10. 1. react 编程实践 俄罗斯方块-需求分析

    1. 需求分析 俄罗斯方块的要素 界面展示 定时刷新 键盘响应 方块模型 游戏规则 俄罗斯方块 比 "电商购物车" 好在哪? 业务比较简单, 人人都了解, 不需要过多前置知识 技术 ...