Python CSV - 读取写入 CSV
最后修改于 2024 年 1 月 29 日
在本文中,我们将展示如何使用 Python csv 模块读取和写入 CSV 数据。
CSV
CSV (Comma Separated Values,逗号分隔值) 是一种非常流行的导入和导出数据格式,用于电子表格和数据库。CSV 文件中的每一行都是一个数据记录。每个记录由一个或多个字段组成,字段之间用逗号分隔。虽然 CSV 是一种非常简单的数据格式,但可能存在许多差异,例如不同的分隔符、换行符或引用字符。
Python csv 模块
csv
模块实现了用于以 CSV 格式读取和写入表格数据的类。csv
模块的 reader
和 writer
对象读取和写入序列。程序员还可以使用 DictReader
和 DictWriter
类以字典形式读取和写入数据。
Python CSV 方法
下表显示了 Python csv 方法
方法 | 描述 |
---|---|
csv.reader | 返回一个 reader 对象,该对象迭代 CSV 文件的行 |
csv.writer | 返回一个 writer 对象,该对象将数据写入 CSV 文件 |
csv.register_dialect | 注册 CSV 方言 |
csv.unregister_dialect | 注销 CSV 方言 |
csv.get_dialect | 返回具有给定名称的方言 |
csv.list_dialects | 返回所有已注册的方言 |
csv.field_size_limit | 返回解析器允许的当前最大字段大小 |
使用 Python csv 模块
import csv
要使用 Python CSV 模块,我们需要导入 csv
。
Python CSV reader
csv.reader
方法返回一个 reader 对象,该对象迭代给定 CSV 文件中的行。
$ cat numbers.csv 16,6,4,12,81,6,71,6
numbers.csv
文件包含数字。
#!/usr/bin/python import csv with open('numbers.csv', 'r') as f: reader = csv.reader(f) for row in reader: for e in row: print(e)
在代码示例中,我们打开 numbers.csv
进行读取,并读取其内容。
reader = csv.reader(f)
我们获取 reader
对象。
for row in reader: for e in row: print(e)
通过两个 for 循环,我们迭代数据。
$ ./read_csv.py 16 6 4 12 81 6 71 6
使用不同分隔符的 Python CSV reader
csv.reader
方法允许使用其 delimiter
属性使用不同的分隔符。
$ cat items.csv pen|cup|bottle chair|book|tablet
items.csv
包含用 '|' 字符分隔的值。
#!/usr/bin/python import csv with open('items.csv', 'r') as f: reader = csv.reader(f, delimiter="|") for row in reader: for e in row: print(e)
该代码示例从使用 '|' 分隔符的 CSV 文件中读取和显示数据。
$ ./read_csv2.py pen cup bottle chair book tablet
Python CSV DictReader
csv.DictReader
类的工作方式与常规 reader 类似,但将读取的信息映射到字典中。可以通过 fieldnames
参数传入字典的键,也可以从 CSV 文件的第一行推断出来。
$ cat values.csv min,avg,max 1, 5.5, 10 2, 3.5, 5
该文件的第一行由字典键组成。
#!/usr/bin/python # read_csv3.py import csv with open('values.csv', 'r') as f: reader = csv.DictReader(f) for row in reader: print(row['min'], row['avg'], row['max'])
该示例使用 csv.DictReader
从 values.csv
文件中读取值。
for row in reader: print(row['min'], row['avg'], row['max'] )
该行是一个 Python 字典,我们使用键引用数据。
Python CSV writer
csv.writer
方法返回一个 writer 对象,该对象将用户的数据转换为给定类文件对象上的分隔字符串。
#!/usr/bin/python import csv nms = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]] with open('numbers2.csv', 'w') as f: writer = csv.writer(f) for row in nms: writer.writerow(row)
该脚本将数字写入 numbers2.csv
文件。 writerow
方法将一行数据写入指定的文件。
$ cat numbers2.csv 1,2,3,4,5,6 7,8,9,10,11,12
可以一次写入所有数据。 writerows
方法将所有给定的行写入 CSV 文件。
#!/usr/bin/python import csv nms = [[1, 2, 3], [7, 8, 9], [10, 11, 12]] with open('numbers3.csv', 'w') as f: writer = csv.writer(f) writer.writerows(nms)
该代码示例使用 writerows
方法将三行数字写入文件。
Python CSV DictWriter
csv.DictWriter
类的工作方式与常规 writer 类似,但将 Python 字典映射到 CSV 行。 fieldnames
参数是一个键序列,用于标识传递给 writerow
方法的字典中的值写入 CSV 文件的顺序。
#!/usr/bin/python import csv with open('names.csv', 'w') as f: fnames = ['first_name', 'last_name'] writer = csv.DictWriter(f, fieldnames=fnames) writer.writeheader() writer.writerow({'first_name' : 'John', 'last_name': 'Smith'}) writer.writerow({'first_name' : 'Robert', 'last_name': 'Brown'}) writer.writerow({'first_name' : 'Julia', 'last_name': 'Griffin'})
该示例使用 csv.DictWriter
将 Python 字典中的值写入 CSV 文件。
writer = csv.DictWriter(f, fieldnames=fnames)
创建新的 csv.DictWriter
。标头名称传递给 fieldnames
参数。
writer.writeheader()
writeheader
方法将标头写入 CSV 文件。
writer.writerow({'first_name' : 'John', 'last_name': 'Smith'})
Python 字典写入 CSV 文件中的一行。
$ cat names.csv first_name,last_name John,Smith Robert,Brown Julia,Griffin
Python CSV 自定义方言
使用 csv.register_dialect
方法创建自定义方言。
#!/usr/bin/python import csv csv.register_dialect("hashes", delimiter="#") with open('items3.csv', 'w') as f: writer = csv.writer(f, dialect="hashes") writer.writerow(("pens", 4)) writer.writerow(("plates", 2)) writer.writerow(("bottles", 4)) writer.writerow(("cups", 1))
该程序使用 (#) 字符作为分隔符。使用 csv.writer
方法中的 dialect
选项指定方言。
$ cat items3.csv pens#4 plates#2 bottles#4 cups#1
生成虚假的 CSV 数据
在下一个示例中,我们将创建一个新的 CSV 文件,其中填充了虚假数据。虚假数据对于测试很有用。
我们使用 faker
模块来生成虚假数据。
#!/usr/bin/python from faker import Faker import csv faker = Faker() with open('users.csv', 'w', newline='') as f: fieldnames = ['id', 'first_name', 'last_name', 'occupation'] writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader() for i in range(1, 101, 1): _id = i fname = faker.first_name() lname = faker.last_name() occupation = faker.job() writer.writerow({'id': _id, 'first_name': fname, 'last_name': lname, 'occupation': occupation})
该示例创建 100 个用户。用户以 CSV 格式写入 users.csv
文件。
来源
在本文中,我们使用了 Python 中的 CSV。
作者
列出所有 Python 教程。