csv 学习

6 篇文章 0 订阅
4 篇文章 0 订阅

背景

在处理基础数据的时候使用excle 还是不错的,然后往数据库中导入后就可以使用了,比较方便。 csv 所产生的二维数组 再加上numpy的使用就可以做很多的事情,处理事情的速度就会加快,处理文档类的选择也会很多,可以提高开发的速度等。所以学习解析 scv numpy数据分析的知识很有必要。

官方文档

https://docs.python.org/3/library/csv.html#examples

csv

1 先做一个基础csv 文件
这里写图片描述

这样一个csv 文件

读取文件

1 使用reader 函数进行读取,接受一个可迭代的对象,能够返回一个生成器。下面读取全部文件, 以行位单位,进行读取 存入到数组中:

import csv
with open("csv1.csv", 'r', encoding="utf8") as f:
    reader = csv.reader(f)
    rows = [row for row in reader]

print(rows)
# 输出结果
[['No', 'Name', 'Age', 'Score'], ['1', 'Juky', '10', '95'], ['2', 'Yang', '11', '96'], ['3', 'Xiao', '12', '97'], ['4', 'Dong', '13', '98'], ['5', 'Yang', '14', '99']]

输出结果是这样的二维数组
就可以使用numpy 老进行处理了

获取某一列的数据

获取 第二列的数据

import csv
with open("csv1.csv", 'r', encoding="utf8") as f:
    reader = csv.reader(f)
    rows = [row[1] for row in reader]
print(rows)
# 输出如下
['Name', 'Juky', 'Yang', 'Xiao', 'Dong', 'Yang']

注意从csv读出的都是str类型。这种方法要事先知道列的序号,比如Name在第2列,而不能根据’Name’这个标题查询。这时可以采用第二种方法:

第二种方法是使用DictReader,和reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的标题(即列头)。这样做的好处是一个是可以快速找到,一个是如果字段什么设计好的话,不需要处理就可以直接插入到数据库中啦,下面来看下具体的操作

import csv

with open("csv1.csv", "r", encoding="utf8") as f:
    reader = csv.DictReader(f)
    column = [row for row in reader]

print(column)
# 输出结果
[OrderedDict([('No', '1'), ('Name', 'Juky'), ('Age', '10'), ('Score', '95')]),
 OrderedDict([('No', '2'), ('Name', 'Yang'), ('Age', '11'), ('Score', '96')]),
 OrderedDict([('No', '3'), ('Name', 'Xiao'), ('Age', '12'), ('Score', '97')]),
 OrderedDict([('No', '4'), ('Name', 'Dong'), ('Age', '13'), ('Score', '98')]), 
 OrderedDict([('No', '5'), ('Name', 'Yang'), ('Age', '14'), ('Score', '99')])]

这样列的表头就很有用啦

读取对应标题的一列

with open("csv1.csv", "r", encoding="utf8") as f:
    reader = csv.DictReader(f)
    column = [row["Name"] for row in reader]

print(column)
# 输出
['Juky', 'Yang', 'Xiao', 'Dong', 'Yang']

提醒一点这里 二维数组利用 numpy 中的特性可以获取 二维数组中的 很多元素(根据坐标去获取),当这个结构和自己的想要的不是很吻和的话用 numpy 调整是很棒的选择

数据写入到csv 中

是最基本的读取csv 文件中的 处理方式, 目前工作中遇到的也是读取的比较多,也有 数据保存写入的需求,现在来看下具体的实现

有newline=” 的写入

读取使用reader 写入使用writer

一行一行的写入的操作

import csv

# 使用数字和字符串的数字都可以
datas = [['name', 'age'],
         ['Bob', 14],
         ['Tom', 23],
        ['Jerry', '18']]
#
with open('example.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for row in datas:
        writer.writerow(row)

# csv 文件中的内容
name,age
Bob,14
Tom,23
Jerry,18

一次多行的写入

with open('example.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerows(datas)

实现效果和一行行插入的效果一样

没有newline =”

with open('example.csv', 'w') as f:
    writer = csv.writer(f)
    for row in datas:
        writer.writerow(row)

# 结果(有空格)
name,age

Bob,14

Tom,23

Jerry,18

以上是最基本的实现 csv 读和写的 操作 如果有别的需求 使用到属性可以查询官方文档
https://docs.python.org/3/library/csv.html#examples

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值