写在前面:

       在网络爬虫中我们一般都是爬取的数据,最后一般会写入到excel文件中,所以不可避免的要用到csv模块,所以弄清楚csv模块是如何写入文件的就显得十分重要了。这里要说的数据类型不是dataframe,因为那样很容易就弄清楚是怎么写入的,本文主要介绍要写入的数据存储在列表中的情形,比如:

data = {"id": "123", "sex": "male"}

接下来我们将会详细说明csv模块是如何写入文件的


首先我们要知道写入文件的基本语法结构如下

import csv

data = {"id": "123", "sex": "male"}
file_name = "D://wangyang//练习的python程序//网络爬虫//writefile.csv"
with open(file_name, "w+", errors="ignore") as f:
    f_csv = csv.writer(f)
    f_csv.writerows(data)

一、open函数的简单介绍

这里我们简要介绍一下open函数的一些用法,

详细介绍可以参考open函数——菜鸟驿站

1、第一个参数(file_name)

需要填文件名(包含绝对路径+文件名),比如

file_name = "D://wangyang//练习的python程序//网络爬虫//writefile.csv"

表示在电脑D盘的wangyang文件夹中的网络爬虫文件里的writefile.csv文件

2、第二个参数,写入模式

更多模式如下,可以根据需要进行选择

注意:不管选择哪种写入模式,在运行程序之前都要把文件关闭,否则会报错,因为它比较害羞你看着它的话,它是没有办法写入的!

Python转csv加密 python向csv文件中写入数据_python

3、可选参数

open函数中还有很多可选参数,可以根据需要进行选择,这里主要介绍以下两个,详细的介绍可以在网上查

3.1 errors

errors="ignore"表示当写入文档遇到错误是自动跳过,写入下一个元素。因为有可能在爬虫的过程中有none值,写入的时候会报错,这时我们忽略它。

3.2 newline

newline=""表示不要空行

比如

import csv

data = {"id": "123", "sex": "male"}
x1 = str("你好")
data2 = [["id", "123"], x1, "sex", "male"]
file_name = "D://wangyang//练习的python程序//网络爬虫//writefile.csv"
with open(file_name, "w+", errors="ignore") as f:
    f_csv = csv.writer(f)
    f_csv.writerows(data2)

结果如下

Python转csv加密 python向csv文件中写入数据_迭代_02

给open函数加上newline参数后,如

import csv

data = {"id": "123", "sex": "male"}
x1 = str("你好")
data2 = [["id", "123"], x1, "sex", "male"]
file_name = "D://wangyang//练习的python程序//网络爬虫//writefile.csv"
with open(file_name, "w+", errors="ignore", newline="") as f:
    f_csv = csv.writer(f)
    f_csv.writerows(data2)

结果如下

Python转csv加密 python向csv文件中写入数据_Python转csv加密_03

二、csv模块中的函数

这里主要介绍的是writerow与writerows的区别,我们先简单看看下面的例子,要写入的文件如下

data = ["id", "123", "sex", "male"]

其他代码均一样

用writerow写入的结果

Python转csv加密 python向csv文件中写入数据_python_04

用writerows写入的结果

Python转csv加密 python向csv文件中写入数据_python_05

首先我们要了解到csv写入的是一个可迭代对象(比如列表,字符串),writerow只写入一维的数据,而writerows写入二维的数据,具体解释如下

两者主要的区别就是:writerow只拆一次写入,writerows拆两次写入(这里的拆都是拆的可迭代对象,如列表、字符串等)

2.1 writerow

writerow只拆一次,拆的原则是从外往里拆,第一次将列表拆成四个对象“id”,"123","sex","male",好了只能拆一次,所以依次把这四个对象分别写入单元格中。

再比如我们看下面的例子

data2= [["id", "123"], "sex", "male"]

首先拆一次,得到下面三个对象

第一个对象:列表["id","123"];第二、三个对象分别是:"sex","male"(两者都是字符串)

好了,因为只能拆一次,所以把这三个对象分别写入单元格中,如下所示

Python转csv加密 python向csv文件中写入数据_python_06

2.2 writerows

wirterows拆两次,这里说的不是能拆两次,是必须拆两次!看之前的例子,首先拆第一次,得到四个对象,分别是

"id","123","sex","male"(均是字符串)

因为必须拆两次,所以还要继续拆(因为它们都是字符串,只能拆可迭代对象,所以可以继续),比如第一个

“id”可以拆开为,i,d,分别写入单元格中,在同一行中

另起一行拆第二个对象,后面类似。

再考虑例子data2,首先拆第一次,得到三个对象,好的,接下来来拆第一个对象

因为它是一个列表,可迭代对象之一,所以能拆,拆成两个对象分别为:“id”,"123"(两个都是字符串,还是能拆的,但是不能继续拆了,因为已经拆了两次了),所以id在同一个单元格内,与“123”在同一行,另起一行继续拆别的对象,所以结果如下:

Python转csv加密 python向csv文件中写入数据_迭代_07


最后看下面的例子

data3 = [[["id", "123"], "sex"], "male"]

现在猜猜看最后的结果是什么

writerow:

Python转csv加密 python向csv文件中写入数据_Python转csv加密_08

writerows:

Python转csv加密 python向csv文件中写入数据_字符串_09

是不是跟你猜的结果一样呢?