python 操作csv文件

作者: eeert2 | 来源:发表于2020-03-02 18:58 被阅读0次

python内置的csv模块可以帮助我们操作csv文件

一、什么是csv文件

csv的全称是Comma-Separated Values,意思是逗号分隔值,通俗点说就是一组用逗号分隔的数据。CSV文件可以用excel打开,会显示如下图所示:

截屏2020-03-0218.27.00.png

这个文件用文本打开显示是这样的,这是它原始的样子:

截屏2020-03-0218.24.21.png

二、读文件

1. 使用reader

reader接收一个可迭代的对象(比如csv文件),能返回一个生成器,就可以从其中解析出csv的内容:比如下面的代码可以读取csv的全部内容,以行为单位:

import csv


path = '/Users/wuyaa/Desktop/test.csv'
with open(path, 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

可以得到如下所示结果:

['username', 'password', 'address']
['zhuyy', '123456', '杭州']
['lsu', '2084_73', '北京']
['lkd', '63*$er', '天津']
['dfj', '09rjs65', '重庆']
['dkg', 'dhj634', '上海']

可以看出,csv模块帮我们把每一行按照逗号分隔成一个数组,这样我们在使用具体值:

    for row in reader:
        address = row[2]

使用上述的reader可以实现csv的读取,但是它是硬编码。例如下一次我们的csv文件列顺序有所改变:

username,address,password
zhuyy,杭州,123456
lsu,北京,2084_73
lkd,上海,63*$er
dfj,深圳,09rjs65
dkg,广州,dhj634

这样我们就还需要去修改源码,对于这种情况推荐使用DictReader

2. 使用DictReader

import csv

path = '/Users/wuyaa/Desktop/test.csv'
with open(path, 'r', encoding='utf-8-sig') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)

结果:

OrderedDict([('username', 'zhuyy'), ('address', '杭州'), ('password', '123456')])
OrderedDict([('username', 'lsu'), ('address', '北京'), ('password', '2084_73')])
OrderedDict([('username', 'lkd'), ('address', '上海'), ('password', '63*$er')])
OrderedDict([('username', 'dfj'), ('address', '深圳'), ('password', '09rjs65')])
OrderedDict([('username', 'dkg'), ('address', '广州'), ('password', 'dhj634')])

可以看出csv将每一行自动转换成有序字典,我们可以对字典get取值。

OrderedDict的参数:

  • fieldnames 指定返回字典的字段名,如果没有指定,则将第一行作为字段名[我们上面就是默认第一行作为字段名],如果指定了字段名,则第一行将作为内容返回
reader = csv.DictReader(f, fieldnames=['name', 'addr', 'pw'])

则结果为

OrderedDict([('name', 'username'), ('addr', 'address'), ('pw', 'password')])
OrderedDict([('name', 'zhuyy'), ('addr', '杭州'), ('pw', '123456')])
OrderedDict([('name', 'lsu'), ('addr', '北京'), ('pw', '2084_73')])
OrderedDict([('name', 'lkd'), ('addr', '上海'), ('pw', '63*$er')])
OrderedDict([('name', 'dfj'), ('addr', '深圳'), ('pw', '09rjs65')])
OrderedDict([('name', 'dkg'), ('addr', '广州'), ('pw', 'dhj634')])
  • restkey填充缺少的字段名
  • restkey填充缺少的字段内容
    如以下:
zhuyy,杭州,123456,11
lsu,北京,2084_73,22
lkd,上海,63*$er,33
dfj,深圳,09rjs65,44
dkg,广州
import csv

path = '/Users/wuyaa/Desktop/test.csv'
with open(path, 'r', encoding='utf-8-sig') as f:
    reader = csv.DictReader(f, restkey='缺少的名称', restval='缺少的内容')
    for row in reader:
        print(row)

结果:

OrderedDict([('username', 'zhuyy'), ('address', '杭州'), ('password', '123456'), ('缺少的名称', ['11'])])
OrderedDict([('username', 'lsu'), ('address', '北京'), ('password', '2084_73'), ('缺少的名称', ['22'])])
OrderedDict([('username', 'lkd'), ('address', '上海'), ('password', '63*$er'), ('缺少的名称', ['33'])])
OrderedDict([('username', 'dfj'), ('address', '深圳'), ('password', '09rjs65'), ('缺少的名称', ['44'])])
OrderedDict([('username', 'dkg'), ('address', '广州'), ('password', '缺少的内容')])

二、写文件

1.使用writer
import csv
with open('test2.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['Spam'] * 5 + ['Baked Beans'])
    writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

使用writer.writerow写入字符串列表。

2.使用DictReader
import csv

with open('names.csv', 'w') as csvfile:
    # 设置表头
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
    writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

使用DictReaderwriterow可以写入字典,这种使用场景更加的广泛,从数据库中取数据,然后将数据序列化成字典,再将字典写入csv是比较通用的做法。

例如在django

# models.py
from django.db import models


class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    address = models.CharField(max_length=64)
# views.py
from django.views import View
from django.forms import model_to_dict
import csv

class UserView(View):
    def get(self, request):
        pass

    def save_csv(self, request):
        with open('users.csv', 'w') as csvfile:
            # 设置表头
            fieldnames = ['username', 'password', 'address']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
            writer.writeheader()  # 写入表头

            # 从 request 中获取查询结果集
            queryset = self.get_queryset(request)
            for user in queryset:
                data = model_to_dict(user)
                writer.writerow(data)

相关文章

  • python 操作csv文件

    python内置的csv模块可以帮助我们操作csv文件 一、什么是csv文件 csv的全称是Comma-Separ...

  • Python

    Python 创建文件 Python 对数据库进行操作--增删改查 Python 对csv进行操作 Python ...

  • python读写csv文件

    今天带来的python操作csv文件的内容,教程向。 使用工具:python环境、csv 源码讲解环节 好的,环境...

  • Django-26 django生成csv文件

    Python提供了内建库 - csv;可直接通过该库操作csv文件案例如下: csv文件下载 在网站中,实现下载c...

  • python 实现批量转换坐标系

    注意:使用python3环境操作,将excel文件先转成csv文件,然后用jishib将csv文件打开并另存为(主...

  • python操作csv文件

    说明:因为最近做自动化和压测总涉及到大量数据的读写问题,所以这里记录下 读取csv文件数据 根据csv文件的数据组...

  • python操作CSV文件

    概念:CSV是逗号分隔值或者字符分割值,其文件以纯文本形式存储表格数据。CSV文件可以用文本文件或者转换成EXCE...

  • 搜企网爬虫作业

    作业要求 (1)csv文件数据写入(2)mysql 操作,python mysql操作 这个需要安装mysql以及...

  • python作业-20170601

    作业:(1)csv文件数据写入(2)mysql 操作,python mysql操作 这个需要安装mysql以及p...

  • 文本/数据操作

    大文件读取 json 中文编码问题: 排序: url中文转码(python3) csv 文件操作模式 xml lx...

网友评论

    本文标题:python 操作csv文件

    本文链接:https://www.haomeiwen.com/subject/swazsctx.html