逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是bitASCII是最基本的通用编码。
前言
上期文章中,我们学习了txt文本的基本操作,本期文章,我们来学习另一种文件的读取操作---CSV文件读写操作。
一、CSV文件读写操作
平时做数据处理的时候,我们可能接触到较多的文件是CSV文件格式,这种格式的文件在展示效果上看起来似乎与excel差不多,但是在使用的时候还是有一些小的差别,针对单个的csv文件,我们可以手动的进行数据的提取,然而面对成千上万行的数据时就最好采用代码的方式了,一起来看看吧!
1.1 CSV文件之读取操作
- 原始文件:
如图所示为 四行四列的CSV文件(文件展示与excel类似)
2.源码实现
(1)读取操作一:按行读取并显示
代码语言:javascript复制import time,csv
from itertools import islice
data_path = 'data.csv'
# 用 with open 方式打开文件 防止忘记关闭文件
with open(data_path) as f:
reader = csv.reader(f)
i = 1
for row in reader:
print('第 %d 行的数据为: %s' %(i,row))
i = i 1
显示效果:
获取某一列的数据:
代码语言:javascript复制import time,csv
from itertools import islice
# 用 with open 方式打开文件 防止忘记关闭文件
with open(data_path) as f:
reader = csv.reader(f)
i = 1
for row in reader:
# 获取每一行第一列的数据
print('第 %d 行 第 1 列的数据为: %s' %(i,row[0]))
i = i 1
显示效果:
读取操作二:按行读取并显示
代码语言:javascript复制import time,csv
from itertools import islice
def get_data(data_0_path):
dataset = []
label = []
with open(data_0_path,'r') as csvfile:
data_rows = csv.reader(csvfile, delimiter=',')
# 0代表起始的行索引,也就是从第一行开始
for row in islice(data_rows, 0,4):
print(row)
# row = np.array(row)
return dataset, label
data_path = 'data.csv'
get_data(data_path)
显示效果:
获取第一行的数据(0到1):
代码语言:javascript复制#coding:utf-8
import time,csv
from itertools import islice
def get_data(data_0_path):
dataset = []
label = []
with open(data_0_path,'r') as csvfile:
data_rows = csv.reader(csvfile, delimiter=',')
for row in islice(data_rows, 0,1):
print(row)
# row = np.array(row)
return dataset, label
data_path = 'data.csv'
get_data(data_path)
显示效果:
获取前三行的数据(0到3):
代码语言:javascript复制def get_data(data_0_path):
dataset = []
label = []
with open(data_0_path,'r') as csvfile:
data_rows = csv.reader(csvfile, delimiter=',')
for row in islice(data_rows, 0,3):
print(row)
# row = np.array(row)
return dataset, label
显示效果:
1.2 CSV文件之写入操作
1.写入过程:
(1)可以事先在本地新建一个待写入数据的csv文件,也可以不新建由程序自动生成。
(2)自定义好表格的列属性和每一样对应属性的数据,即定义两个数据列表。
(3)写入顺序为先写列属性,后写入对应属性数据。
2. 代码实现
代码语言:javascript复制import os
import csv
data_path = './data2.csv'
table_index_title = ['规格','属性','单位','重量','年份']
rows_data = [ ['A1','材料','kg',56,18], ['A1','钢材','kg',62,17], ['B2','废料','kg',13,19], ['B2','其余','kg',89,20]]
with open(data_path,'a ', newline='')as f:
f_csv = csv.writer(f)
f_csv.writerow(table_index_title)#按行写入
f_csv.writerows(rows_data)#多行写入
print("数据写入成功")
显示效果:
如果不采用 newline=',就会出现空行。
代码语言:javascript复制import os
import csv
data_path = './data2.csv'
table_index_title = ['规格','属性','单位','重量','年份']
rows_data = [ ['A1','材料','kg',56,18], ['A1','钢材','kg',62,17], ['B2','废料','kg',13,19], ['B2','其余','kg',89,20]]
with open(data_path,'w ')as f:
# with open(data_path,'w ', newline='')as f:
f_csv = csv.writer(f)
f_csv.writerow(table_index_title)#按行写入
f_csv.writerows(rows_data)#多行写入
print("数据写入成功")
显示效果:
不覆盖原始数据, 继续添加内容。
原始数据:
再次添加数据:
代码语言:javascript复制import os
import csv
data_path = './data2.csv'
table_index_title = ['规格','属性','单位','重量','年份']
rows_data = [ ['A1','材料','kg',56,18], ['A1','钢材','kg',62,17], ['B2','废料','kg',13,19], ['B2','其余','kg',89,20]]
with open(data_path,'a ', newline='')as f:
f_csv = csv.writer(f)
f_csv.writerow(table_index_title)#按行写入
f_csv.writerows(rows_data)#多行写入
print("数据写入成功")
效果展示:
END
结语
本周的分享内容就到此结束了,读写csv文件入门很简单,但是学深却不太容易,比如后期的数据处理就需要多去查看各种文档来了解某个处理函数的使用,今天的内容都是基础,粉丝朋友们记得实战哦,说不定那天就用到了,到时候就不用再去百度啦。
我们下期再见!
编辑:玥怡居士|审核:小圈圈居士