【Python3 爬虫】U22_csv文件处理

ε祈祈猫儿з 提交于 2020-04-04 13:11:22

1.什么是csv?

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

2.csv文件的两种读取方式

2.1 reader读取

import csv
with open("student.csv","r") as f:
    # reader是一个迭代器
    reader = csv.reader(f)
    titles = next(reader) # 跳过标题行
    for x in reader:
        name = x[0]
        age = x[1]
        print("姓名:%s" %name, "年龄:%s" %age)

输出结果:
姓名:张三 年龄:15
姓名:李四 年龄:16
姓名:王五 年龄:17

使用reader读取的话,存在一个问题,在获取数据的时候,通过下标来获取列,现在第一列式name,如果我把第一列修改为id列,那么数据获取将会出现问题,所以有了DictReader

2.2 DictReader读取

如果想要获取数据的时候通过标题来获取,那么可以使用DictReader

import csv
with open("student.csv","r") as f:
    # 使用DictReader创建的reader对象,不会包含标题那行数据,reader是一个迭代器,遍历这个迭代器,返回的是一个字典
    reader = csv.DictReader(f)
    for x in reader:
        value = {"姓名":x["name"],"年龄":x["age"]}
        print(value)

输出结果:
{'姓名': '张三', '年龄': '15'}
{'姓名': '李四', '年龄': '16'}
{'姓名': '王五', '年龄': '17'}

3.csv文件的两种写入方式

3.1 writer写入

import csv
title = ["empno","ename","owner"]
value = [
    ('A001','关羽','刘备'),
    ('A002','张飞','刘备'),
    ('A003','夏侯惇','曹操'),
    ('A004','郭嘉','曹操'),
]
with open("emp.csv", "w", encoding="utf-8", newline='') as f: # 默认的newline为\n
    writer = csv.writer(f)
    writer.writerow(title)
    writer.writerows(value)

运行后结果:

3.2 DictWriter写入

import csv
title = ['empno','ename','owner']
value = [
    {'empno':'A001','ename':'关羽','owner':'刘备'},
    {'empno':'A002','ename':'张飞','owner':'刘备'},
    {'empno':'A003','ename':'夏侯惇','owner':'曹操'},
    {'empno':'A004','ename':'郭嘉','owner':'曹操'},
]
with open("emp.csv", "w", encoding="utf-8", newline='') as f: # 默认的newline为\n
    writer = csv.DictWriter(f,title)
    # 写入表头直接调用writeheader()方法即可
    writer.writeheader()
    writer.writerows(value)

运行后结果:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!