爬虫从入门到入狱(2)——CSV文件操作

文章内容均出自《python爬虫开发》

2.1 文件操作

2.1.1 打开文件:open与with open () as

使用Python打开一个文本文件时,首先要保证这个文件是存在的。
可以直接将文本文件和Python文件放在一起,这样就可以直接使用文件名来打开文本文件。
在读文件的时候,“文件操作方式”这个参数可以省略,也可以写成“r”,也就是read的首字母。

“open”这个关键字它的作用是打开一个文件,并创建一个文件对象。
##方式一:open,需要手动关闭
请添加图片描述

方式二:上下文管理(自动关闭)
请添加图片描述

参数 :encoding

这里有一个参数“encoding”。这个参数特别有用,它可以在打开文件的时候将文件转换为UTF-8编码格式,从而避免乱码的出现。这个参数只有Python 3有,在Python 2中使用这个参数会报错。如果文件是在Windows中创建的,并且使用UTF-8打开文件出现了乱码,可以把编码格式改为GBK。

2.1.2 阅读文件:read与readlines

read:直接把文件里面的全部内容用一个字符串返回:

f.read()

请添加图片描述

readlines:读取所有行,并以列表的形式返回结果:

f.readlines()

请添加图片描述

2.1.3 写入文件:write与writelines

请添加图片描述
这里多出来一个参数“w”, w是英文write的首字母,意思是以写的方式打开文件。这个参数除了为“w”外,还可以为“a”。它们的区别在于,如果原来已经有一个new.txt文件了,使用“w”会覆盖原来的文件,导致原来的内容丢失;而使用“a”,则会把新的内容写到原来的文件末尾。
其他参数如下:
在这里插入图片描述
方式一:write
直接将一大段字符串写入到文本中,可以使用下面这一行代码:

f.write('一大段')

方式二:writelines
把列表里面的所有字符串写入到文本中,可以使用下面这一行代码:

f.writelines(['第一段','第二段','第三段'])

需要特别注意,写列表的时候,Python写到文本中的文字是不会自动换行的,需要人工输入换行符才可以。
如:

f.writelines(['第一段n','第二段n','第三段'])

2.2 读写CSV文件

2.2.1 CSV文件

CSV文件本质上就是文本文件,但是如果直接用文本编辑器打开,可读性并不高。
如下:
请添加图片描述

2.2.2 Python读CSV文件:DictReader()

python 的标准CSV库文档:https://docs.python.org/3/library/csv.html

要读取CSV文件,首先需要导入Python的CSV模块:

import csv

由于CSV文件本质上是一个文本文件,所以需要先以文本文件的方式打开,再将文件对象传递给CSV模块:
操作范例:

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

结果如下:
请添加图片描述

图中的username,content,rely_time为3.1.1图片首行
for循环得到的row是OrderedDict(有序字典),(3.8返回的行是dict型)可以直接像普通字典那样使用:

username= row['username']
content=row['content']
reply_time=	row['reply_time']

使用范例
请添加图片描述

经过几行代码,已经将CSV文件转化为字典了。

注意:读取文本内容的代码必须放在缩进内部进行,否则会导致报错
请添加图片描述

这是因为f变量里面的值是一个生成器,生成器只有在被使用(更准确的说法是被迭代)的时候才会去读文本内容。但是退出with的缩进以后,文件就被Python关闭了,这个时候当然什么都读不了。
使用列表推导式可以跳过这种限制。请添加图片描述

2.2.3 Python写CSV文件:DictWriter()

Python写CSV文件比读CSV文件稍微复杂一点,因为要指定列名。列名要和字典的Key一一对应。
Python写CSV文件时需要用到csv.DictWriter()这个类。它接收两个参数:第1个参数是文件对象f;第2个参数名为fieldnames,值为字典的Key列表。
写入列名行: writeheader()
将包含字典的列表全部写入到CSV文件中:writerows()
写入单个字典:writerow()
使用范例:

import csv
data=[{'name':'老大','age':20,'salary':99999},
      {'name':'老二','age':18,'salary':12345},
      {'name':'老三','age':15,'salary':00000}]
with open('a.csv','w',encoding='gbk') as f:
    write=csv.DictWriter(f,fieldnames=['name','age','salary'])
    write.writeheader()#写入第一行,name,age,salay
    write.writerows(data)
    write.writerow({'name':'超人','age':999,'salary':98976654})

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>