csv文件
参看RFC 4180RFC 4180提出了MIME类型(”text/csv”)对于CSV格式的标准,可以作为一般使用的常用定义,满足大多数实现似乎遵循的格式。
CSV(Comma-Separated Values,逗号分隔的值)是一种以
.csv
作为文件扩展名以纯文本形式存储表格数据(数字和文本)的文件格式,文件的每一行都是一个数据记录。每个记录由一个或多个字段组成,用逗号分隔。使用逗号作为字段分隔符是此文件格式的名称的来源,因为分隔字符也可以不是逗号,有时也称为字符分隔值。CSV广泛用于不同体系结构的应用程序之间交换数据表格信息,解决不兼容数据格式的互通问题,一般按照传输双方既定标准进行格式定义,而其本身并无明确格式标准。
csv文件特点
CSV 文件因其简单易用、兼容性高、易于数据交换等特点受到了广泛的欢迎。以下是有关 CSV 使用的一些优点:
- 简单易懂::CSV 文件基于纯文本格式,因此可以使用任何文本编辑器(如Notepad)轻松打开和编辑。
- 数据兼容性:CSV 文件中的数据可以很容易地跨平台进行传输和处理,任何具有 CSV 处理功能的软件(如Microsoft Excel、Google Sheets、甚至编程语言库)都能处理该类型的文件。
- 资源占用低:CSV 文件以纯文本形式存储数据,其体积相对较小,便于节省存储空间。
csv文件既可以使用文本编辑器以纯文本的形式对其进行编辑,也可以通过Excel,wps等软件像处理表格一样处理csv文件。
csv文件结构
CSV文件结构相对简单,通常由以下组成
- 每行表示一条记录:csv文件中的每一行代表一条记录,相当于数据库中的一行数据。换行符为\r\n,最后一行可以没有换行符。
- 逗号(或制表符)分割:每行数据中,使用逗号,进行数据分割,代表不同的数据
- 在以纯文本形式编辑csv文件时,逗号分隔符后面不要有空格,否则空格会被写入文件当中
- 双引号包围:当数据单元格中的内容含有逗号、双引号、换行符时,为了避免混淆,需要使用双引号将这个数据包围起来。(使用两个双引号表示一个转义)
例如:
上面的例子中,csv文件包含三列(姓名,年龄和性别),每行都由逗号
,
分割的三个数据项组成。csv文件的csv模块处理
Python中集成了专用于处理csv文件的库,名为:csv。
csv 库中有4个常用的对象:
- csv.reader(csvfile, dialect=”excel”, *args, **kwargs) 返回迭代器,迭代每一行数据
- dialect 默认使用excel方言
- delimiter 列分隔符
,
逗号 - lineterminator 行分隔符
\r\n
- quotechar 字段的引用符号,缺省为
”
双引号 - 双引号的处理
- doublequote 双引号的处理,默认True。如果碰到数据中有双引号,而quotechar也是双引号,True则使用2个双引号表示,False表示使用转义字符将作为双引号的前缀
- escapechar一个转义字符,默认为None
- writer = csv.writer(f, doublequote=False, escapechar=’@’) 遇到双引号,则必须提供转义字符
- quoting指定双引号的规则
- QUOTE_ALL所有字段
- QUOTE_MINIMAL特殊字符字段,Excel方言使用该规则
- QOUTE_NONNUMERIC非数字字段
- QUOTE_NONE 都不适用引号
- csv.writer(csvfile, dialect='excel', *args, **kwargs) 返回DictWriter实例,主要有下面两个方法。
- writerow(row) 将单行row写入file文件
- writerows(rows) 将多行rows写入file文件
- csv.DictReader:以字典的形式返回读取的数据。
- csv.DictWriter:以字典的形式写入数据。
- writeheader() 将表头file_header写入文件第一行
- writerow(row) 以字典形式单行数据row写入file文件
- writerows(rows) 以字典形式多行数据rows写入file文件
假设操作的csv文件数据为:
读取
在读取文件时, Python解释器默认将csv文件的第一行数据作为表头信息进行读取.当需要使用DictReader()方式读取文件时,此时表头信息将会充当key, 下面行数据将会充当对应列key的value.
读取的文件内容都是字符串形式, 如果需要将读取的内容按要求进行操作, 需要对对应的内容进行数据类型转化. 比方读取的内容为工资, 则可以将其转化为整形, 再对其进行计算, 比较等.
注:用DictReader方法读取内容,会默认将第一行内容作为字段名(列名)
写入
- csv.writer(file)对象的方法
- writerow(row) 将单行row写入file文件
- writerows(rows) 将多行rows写入file文件
- csv.DictWriter(file, file_header)对象的方法
- writeheader() 将表头file_header写入文件第一行
- writerow(row) 以字典形式单行数据row写入file文件
- writerows(rows) 以字典形式多行数据rows写入file文件
注:
- 以写方式打开文件,注意添加 newline="",否则会在两行数据之间都插入一行空白。
- 如果要保存的内容有中文,而且之后需要用Excel打开文件,那么需要选用
utf-8-sig
编码。如果使用utf-8
编码,会导致使用Excel查看文件时中文乱码。
csv文件的pandas模块处理
可以借助pandas强大的数据处理能力,对csv文件内的内容进行各种数据操作,详情可看pandas模块
- pandas.read_csv(file) 读取csv文件内容
- pandas.to_csv(”file_name.csv”) 保存数据为csv文件形式,文件名file_name.
假设操作文件的数据为: