Python csv模块读取和写入CSV文件(附带实例)
CSV(Comma-Separated Values)为逗号分隔值,也称字符分隔值,因为分隔字符也可以不是逗号,所以文件以纯文本的形式存储表格数据(数字和文本)。
纯文本意味着文件是一个字符序列,不含二进制数字那样的被解读数据。
CSV 是一种通用的、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据。如果安装了 excel,则会默认用 excel 打开 CSV 文件。
比如,终端设备将采集的环境参数保存为 env.csv 文件,格式为:

图 1 用 excel 打开 env.csv 文件的效果
如果要读取 env.csv 文件的所有数据,则代码为:
可以通过 row[0]、row[1] 下标的方式读取文件中的每一行数据,除此之外,还可以通过第一行数据类型的关键字进行读取,代码为:
还可以读取 env.csv 文件中的每一列,代码为:
假设有 headers 和 rows 两个列表,即:
若想将这两个列表中的数据写入 barcelona.csv 文件,可使用下列代码实现,即:
除了可以将列表中的数据写入 CSV 文件,还可以将字典中的数据写入 CSV 文件,代码为:
纯文本意味着文件是一个字符序列,不含二进制数字那样的被解读数据。
CSV 是一种通用的、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据。如果安装了 excel,则会默认用 excel 打开 CSV 文件。
比如,终端设备将采集的环境参数保存为 env.csv 文件,格式为:
env_type, env_value temperature, 25 humidity, 45 illumination, 1000第一行代码分别是环境类型和参数值,用逗号隔开,接下来分别是温度 25、湿度 45、光照强度 1000,可以用 excel 打开 env.csv 文件,如下图所示。

图 1 用 excel 打开 env.csv 文件的效果
Python读取CSV文件
Python 提供了 csv 模块读取 CSV 文件,想要读取 env.csv 文件的每一行数据,代码为:import csv with open('env.csv') as csvfile: readCSV = csv.reader(csvfile, delimiter=',') for row in readCSV: print(row)运行结果为:
['env_type', 'env_value'] ['temperature', '25'] ['humidity', '45'] ['illumination', '1000']首先导入 csv 模块,然后通过 open() 函数打开 env.csv 文件,需要确保 env.csv 文件放置在当前目录下,否则 open() 函数中的文件路径需要调整,接着使用 csv 模块的 reader 读取文件,delimiter=','表示分隔符为逗号。
如果要读取 env.csv 文件的所有数据,则代码为:
import csv with open('env.csv') as csvfile: readCSV = csv.reader(csvfile, delimiter=',') for row in readCSV: print(row[0]) print(row[1])运行结果为:
env_type env_value temperature 25 humidity 45 illumination 1000
可以通过 row[0]、row[1] 下标的方式读取文件中的每一行数据,除此之外,还可以通过第一行数据类型的关键字进行读取,代码为:
import csv from collections import namedtuple with open('env.csv') as f: f_csv = csv.reader(f) headings = next(f_csv) Row = namedtuple('Row', headings) for r in f_csv: row = Row(*r) print(row.env_type) print(row.env_value)运行结果为:
temperature 25 humidity 45 illumination 1000
还可以读取 env.csv 文件中的每一列,代码为:
import csv with open('env.csv') as csvfile: readCSV = csv.reader(csvfile, delimiter=',') list_type = [] _value = [] for row in readCSV: str_type = row[0] str_value = row[1] list_type.append(str_type) list_value.append(str_value) print(list_type) print(list_value)运行结果为:
['env_type', 'temperature', 'humidity', 'illumination'] ['env_value', '25', '45', '1000']
Python写入CSV文件
Python 提供的 csv 模块除了可读取 CSV 文件,还可以写入 CSV 文件。写入文件需要使用 csv 模块的 writer()。假设有 headers 和 rows 两个列表,即:
headers = ['name', 'age', 'weight'] rows = [('messi', 30, 65), ('xavi', 36, 64), ('iniesta', 33, 62)]
若想将这两个列表中的数据写入 barcelona.csv 文件,可使用下列代码实现,即:
import csv headers = ['name', 'age', 'weight'] rows = [('messi', 30, 65), ('xavi', 36, 64), ('iniesta', 333, 62)] with open('barcelona.csv', 'w') as f: f_csv = csv.writer(f) f_csv.writerow(headers) f_csv.writerows(rows)执行代码之后,会在当前目录下生成 barcelona.csv 文件,打开文件的内容为:
name, age, weight messi, 30, 65 xavi, 36, 64 iniesta, 333, 62需要注意的是,headers 只包含一行数据,使用 writerow 写入;rows 包含多行数据,使用 writerows 写入。
除了可以将列表中的数据写入 CSV 文件,还可以将字典中的数据写入 CSV 文件,代码为:
import csv headers = ['name', 'age', 'weight'] rows = [{'name':'messi', 'age':30, 'weight':65}, {'name':'xavi', 'age':36, 'weight':64}, {'name':'iniesta', 'age':33, 'weight':62}] with open('barcelona.csv', 'w') as f: f_csv = csv.DictWriter(f, headers) f_csv.writeheader() f_csv.writerows(rows)执行代码后,barcelona.csv 文件中的内容与从列表中写入的内容一样。