CSV文件以及Python对CSV文件的读写

一,什么是CSV文件

CSV(Comma-Separated Values,CSV)是逗号分隔符的简称,以纯文本形式存储表格数据(可以把纯文本理解为字符串)。

CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符最常见的是逗号或制表符。

CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bit ASCII是最基本的通用编码。术语“CSV”,泛指具有以下特征的文件:

  1. 纯文本,使用某个字符集,比如ASCII,Unicode,EBCDIC或GB2312
  2. 由记录组成,典型的是每行一条记录
  3. 每条记录被分隔符分隔为字段(典型的分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格)
  4. 每条记录都有同样的字段序列。

CSV文件需遵循以下规则:

  1. 开头不留空,以行为单位
  2. 可包含或不含列名,含列名则局文件第一行
  3. 一行数据不跨行,不空行
  4. 以半角逗号作为分隔符,列为空也要表达其存在
  5. 列内容如存在半角引号,替换成半角双引号转义
  6. 文件读写时引号、逗号操作规则互逆
  7. 内码格式不限,可以为ASCII、Unicode或者其他
  8. 不支持数字
  9. 不支持特殊字符

CSV文件举例:

AKDT,Max TemperatureF,Mean TemperatureF,Min TemperatureF

2014-7-1,64,56,50

二,CSV文件用在哪里?

CSV是一种通用的、相对简单的文件格式,被用户、商业或者科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序之间本身是不兼容的。例如,一个用户可能需要交换信息,以一个私有格式存储数据的数据库程序,到一个数据格式完全不同的电子表格。最可能的情况是,该数据程序可以到处数据为CSV,然后被到处的CSV文件可以被电子表格程序导入。

大量的数据网站都提供了CSV文件格式的下载,比如:Kaggle:https://www.kaggle.com/datasets

另外,由于CSV只存在常规约束,而不是明确定义的格式,因此CSV文件存在许多变体。故CSV文件并不完全互通。然而,这些变异非常小,并且有许多应用程序允许用户预览文件,然后制定分隔符、转移规则等,因此在实践中,CSV文件还是非常方便 的。

三,Python读写CSV文件

Python对CSV文件的操作,需要借助CSV模块,因此在对CSV文件操作前,需要先import CSV。CSV中提供了Reader(),和DictReader()两个方法来读取CSV文件,同时也提供过了Writer()和DictWriter()两个方法来写入CSV文件。

1.Reader读取CSV文件:

with open(filename,'r') as file:
    reader=csv.reader(file)
    for row in reader:
        print(reader.line_num,row)

2.DictReader读取CSV文件(提供类似Python中字典的操作,通过列名,读取列中的数据):

with open(filename,'r') as f:
    reader=csv.DictReader(f)
    for row in reader:
        max_temp=row['Max TemperatureF']
        print(max_temp)

3.Writer写CSV文件:

#CSV写文件操作
datas = [['name', 'age'],
         ['Bob', 14],
         ['Tom', 23],
         ['Jerry', '18']]
with open(writefile,'w',newline='') as file1:
    writer=csv.writer(file1)
    for row in datas:
        writer.writerow(row)
#或者用writerrows(),更方便
with open(writefile2, 'w') as file2:
    writer = csv.writer(file2)
    writer.writerows(datas)

4.DictWriter写CSV对象:

headers = ['name', 'age']
datas2 = [{'name': 'Bob', 'age': 23},
         {'name': 'Jerry', 'age': 44},
         {'name': 'Tom', 'age': 15}
         ]
with open('example.csv', 'w', newline='') as f:
    # 标头在这里传入,作为第一行数据
    writer = csv.DictWriter(f, headers)
    writer.writeheader()
    for row in datas2:
        writer.writerow(row)

    # 还可以写入多行
    # writer.writerows(datas2)

猜你喜欢

转载自blog.csdn.net/illikang/article/details/82949065