csv文件是个什么?
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。------百度百科
python读取csv文件的方式有挺多种的,可以用pandas、numpy、csv等。我在这里简单介绍用csv读取文件
读取csv文件
我们可以使用python自带的csv库来快速的读取文件
import os#导入所需库
csv_data = csv.reader(open("csvdata.csv",'r'))#先用open(path,mode="r")来打开文件,然后用csv.reader()读取csv文件
print(type(csv_data))
mode有一下几种,每一种都是一种打开文件的方式 'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) 'U' universal newline mode (deprecated)
我们可以看到输出是一个<class '_csv.reader'>对象。
如果直接输出csv_data会得到怎样的结果呢?
print(csv_data)
输出是<_csv.reader object at 0x000001A5EEEA2730>
这不是csv的内容啊?这是怎么回事啊?因为csv.reader()返回是一个迭代类型,需要通过循环或迭代器访问
for data in csv_data:
print(data)
这样就输出我们想要的内容啦:
['3e82a02f-4267-11e8-aaf9-00163e025669', '19']
['79d16df3-4266-11e8-aaf9-00163e025669', '19']
['9b4d4294-4266-11e8-aaf9-00163e025669', '19']
这是list类型,也就是它拥有list的所有属性
访问csv的一列数据
可以用下列语句来得到一列的数据,例如我得到第一列的数据:
list = [row[1] for row in csv_data]
print(type(list))
print(list)
输出:<class 'list'>
['CATEGORY_ID', '0', '0', '0']
返回的对象是list类型
写csv文件
- writerow():只能一行一行的写入文件
- writerows():可以多行一次写入
一行一行的写入文件:
f = open("data.csv","a",newline='')
c = csv.writer(f)
list = ['haha','hehe']
list1 = ['heihei','enen']
c.writerow(["index","a_name","b_name"])
c.writerow(["index","a_name","b_name"])
f.close()
由于open是mode="a",这是以append方式写文件,也就是不会覆盖原来的内容,在文本最后追加一行,newline可以不写,但是建议加上,如果不加的话,每行数据之间会有一行空格
多行同时写入:
f = open("data.csv","w",newline='')
writer = csv.writer(f)
#先写入columns_name
writer.writerow(["id","name","age"])
#写入多行用writerows
writer.writerows([[0,"wang",18],[1,"zhao",20],[2,"zhou",23]])
f.close()
文件内容:
id,name,age 0,wang,18 1,zhao,20 2,zhou,23