PythonCSV教程展示了如何使用Pythoncsv模块读取和写入CSV数据。
CSV
CSV(逗号分隔值)是电子表格和数据库中使用的一种非常流行的导入和导出数据格式。CSV文件中的每一行都是一条数据记录。每条记录由一个或多个字段组成,以逗号分隔。虽然CSV是一种非常简单的数据格式,但可能存在许多差异,例如不同的分隔符、换行符或引号字符。
Pythoncsv模块
csv模块实现类来读写CSV格式的表格数据。csv模块的reader和writer对象读取和写入序列。程序员还可以使用DictReader和DictWriter类以字典形式读写数据。
PythonCSV方法
下表显示了Pythoncsv方法:
| 方法 | 描述 |
|---|---|
| csv.reader | 返回一个遍历CSV文件行的读取器对象 |
| csv.writer | 返回一个将数据写入CSV文件的写入器对象 |
| td> | |
| csv.register_dialect | 注册一个CSV方言 |
| csv.unregister_dialect | 注销CSV方言 |
| csv.get_dialect | 返回具有给定名称的方言 |
| csv.list_dialects | 返回所有已注册的方言 |
| csv.field_size_limit | 返回解析器允许的当前最大字段大小 |
使用Pythoncsv模块
import csv
要使用PythonCSV模块,我们导入csv。
PythonCSV阅读器
csv.reader方法返回一个读取器对象,该对象遍历给定CSV文件中的行。
$ cat numbers.csv 16,6,4,12,81,6,71,6
numbers.csv文件包含数字。
#!/usr/bin/python
import csv
f = open('numbers.csv', 'r')
with 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
具有不同分隔符的PythonCSV阅读器
csv.reader方法允许使用不同的分隔符及其delimiter属性。
$ cat items.csv pen|cup|bottle chair|book|tablet
items.csv包含以“|”分隔的值性格。
#!/usr/bin/python
import csv
f = open('items.csv', 'r')
with 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
PythonCSV字典阅读器
csv.DictReader类像普通阅读器一样运行,但将读取的信息映射到字典中。字典的键可以通过fieldnames参数传入或从CSV文件的第一行推断。
$ cat values.csv min,avg,max 1, 5.5, 10 2, 3.5, 5
文件的第一行由字典键组成。
#!/usr/bin/python
# read_csv3.py
import csv
f = open('values.csv', 'r')
with 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字典,我们使用键引用数据。
PythonCSV编写器
csv.writer方法返回一个writer对象,该对象将用户的数据转换为给定类文件对象上的分隔字符串。
#!/usr/bin/python
import csv
nms = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]
f = open('numbers2.csv', 'w')
with 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]]
f = open('numbers3.csv', 'w')
with f:
writer = csv.writer(f)
writer.writerows(nms)
代码示例使用writerows方法将三行数字写入文件。
PythonCSVDictWriter
csv.DictWriter类的操作与常规编写器类似,但将Python词典映射到CSV行。fieldnames参数是一个键序列,用于标识传递给writerow方法的字典中的值写入CSV文件的顺序。
#!/usr/bin/python
import csv
f = open('names.csv', 'w')
with 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
PythonCSV自定义方言
使用csv.register_dialect方法创建自定义方言。
#!/usr/bin/python
import csv
csv.register_dialect("hashes", delimiter="#")
f = open('items3.csv', 'w')
with 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
在本教程中,我们在Python中使用了CSV。
列出所有Python教程。
