背景
在处理基础数据的时候使用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