CSV是一种结构化文本文件格式,用于存储和转移表格(或形式接近表格的)数据。该格式可以追溯到1972年。

一个人CSV文件由表示变量的列表和表示记录的行组成(具有统计背景的数据科学家通常称这些记录为观测值)。记录中的字段通常由逗号分隔,但其他分隔符也是比较常见,例如制表符、冒号、分号、和竖直条等。建议在自己创建的文件中坚持使用逗号作为分隔符,同时保证编写的处理程序能正确处理使用其他分隔符的CSV文件。

下面示例中,使用newline=' '选项打开文件,从而避免删除行的操作。

为了方便使用,Python的csv模块提供了一个csv读取器和一个csv写入器。两个对象的第一个参数都是已打开的文本文件句柄。必要时可以通过可选参数delimiter和quotechar,提供默认的分隔符和引号字符。Python还提供了控制转义字符、行终止符等定界符的可选参数。

with open("somefile.csv",newline='') as infile:
    reader=csv.reader(infile,delimiter=',',quotechar='"')

CSV文件的第一条记录通常包含列标题,可能与文件的其余部分有所不同。这只是一个常见的做法,并非CSV格式本身的特性。

CSV读取器提供了一个可以在for循环中使用的迭代接口。迭代器将下一条记录作为一个字符串字段列表返回。读取器不会将字段转换为任何数值数据类型(必要时需要自己处理!),另外,除非传递可选参数skipinitialspace=True,否则不会删除前导的空白。

如果事先不知道CSC的大小,而且文件可能很大,则不宜一次性读取所有记录,而应使用增量的、迭代的、逐行的处理方式:读取一行,处理一行,再获取另一行。

CV写入器提供writerow()和writerows()两个函数。writerow()将一个字符串或数字序列作为一条记录写入文件。该函数将数字转换成字符串,因此不必担心数值表示的问题。类似的,writerows()将字符串或数字序列的列表作为记录集写入文件。

在下面的示例中,使用csv模块从csv文件中提取Answer.Age列。假设此列肯定存在,但列的索引未知。一旦获得数值,借助statistics模块就能得到年龄的平均值和标准偏差。

首先,打开文件并读取数据:

with open("test.csv",newline='') as infile:
    data=list(csv.reader(infile))

检查文件中的第一个记录data[0],它必须包含感兴趣的列标题:



最后,访问剩余记录中感兴趣的字段,并计算和显示统计数据:



csv和statistics模块是底层的、快速而粗糙的工具。后面我们将介绍在更为复杂的项目中使用pandas的数据frame,比现在使用方式检索csv 要高端的多。

results matching ""

    No results matching ""