ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Python CSV 教程-读写 CSV > 原文: [http://zetcode.com/python/csv/](http://zetcode.com/python/csv/) Python CSV 教程显示了如何使用 Python csv 模块读取和写入 CSV 数据。 ## CSV CSV(逗号分隔值)是在电子表格和数据库中使用的非常流行的导入和导出数据格式。 CSV 文件中的每一行都是一个数据记录。 每个记录由一个或多个字段组成,用逗号分隔。 CSV 是一种非常简单的数据格式,但是可以有很多差异,例如不同的定界符,换行或引号字符。 ## Python CSV 模块 `csv`模块实现用于以 CSV 格式读取和写入表格数据的类。 `csv`模块的`reader`和`writer`对象读取和写入序列。 程序员还可以使用`DictReader`和`DictWriter`类以字典形式读取和写入数据。 ## Python CSV 方法 下表显示了 Python csv 方法: | 方法 | 描述 | | --- | --- | | `csv.reader` | 返回一个遍历 CSV 文件各行的读取器对象 | | `csv.writer` | 返回将数据写入 CSV 文件的写入器对象 | | `csv.register_dialect` | 注册 CSV 方言 | | `csv.unregister_dialect` | 注销 CSV 方言 | | `csv.get_dialect` | 返回具有给定名称的方言 | | `csv.list_dialects` | 返回所有已注册的方言 | | `csv.field_size_limit` | 返回解析器允许的当前最大字段大小 | ## 使用 Python `csv`模块 ```py import csv ``` 要使用 Python CSV 模块,我们导入`csv`。 ## Python CSV 读取器 `csv.reader()`方法返回一个读取器对象,该对象遍历给定 CSV 文件中的行。 ```py $ cat numbers.csv 16,6,4,12,81,6,71,6 ``` `numbers.csv`文件包含数字。 `read_csv.py` ```py #!/usr/bin/python3 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`进行读取并读取其内容。 ```py reader = csv.reader(f) ``` 我们得到`reader`对象。 ```py for row in reader: for e in row: print(e) ``` 通过两个`for`循环,我们遍历数据。 ```py $ ./read_csv.py 16 6 4 12 81 6 71 6 ``` 这是示例的输出。 ## 具有不同分隔符的 Python CSV 读取器 `csv.reader()`方法允许使用带有`delimiter`属性的不同定界符。 ```py $ cat items.csv pen|cup|bottle chair|book|tablet ``` `items.csv`包含用`"|"`分隔的字符值。 `read_csv.py` ```py #!/usr/bin/python3 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 文件读取并显示数据。 ```py $ ./read_csv2.py pen cup bottle chair book tablet ``` 这是示例的输出。 ## Python CSV `DictReader` `csv.DictReader`类的操作类似于常规读取器,但会将读取的信息映射到字典中。 字典的键可以使用`fieldnames`参数传入,也可以从 CSV 文件的第一行推断出来。 ```py $ cat values.csv min,avg,max 1, 5.5, 10 2, 3.5, 5 ``` 文件的第一行包含字典键。 `read_csv_dictionary.py` ```py #!/usr/bin/python3 # 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`文件中读取值。 ```py for row in reader: print(row['min'], row['avg'], row['max'] ) ``` 该行是 Python 字典,我们使用键引用数据。 ## Python CSV 编写器 `csv.writer()`方法返回一个`writer`对象,该对象将用户数据转换为给定文件状对象上的定界字符串。 `write_csv.py` ```py #!/usr/bin/python3 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()`方法将一行数据写入指定的文件。 ```py $ cat numbers2.csv 1,2,3,4,5,6 7,8,9,10,11,12 ``` 一次写入所有数据是可能的。 `writerows()`方法将所有给定的行写入 CSV 文件。 `write_csv2.py` ```py #!/usr/bin/python3 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()`方法将三行数字写入文件。 ## Python CSV `DictWriter` `csv.DictWriter`类的操作类似于常规编写器,但将 Python 字典映射到 CSV 行。 `fieldnames`参数是一系列键,这些键标识传递给`writerow()`方法的字典中的值写入 CSV 文件的顺序。 `write_csv_dictionary.py` ```py #!/usr/bin/python3 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 文件。 ```py writer = csv.DictWriter(f, fieldnames=fnames) ``` 创建了新的`csv.DictWriter`。 标头名称将传递给`fieldnames`参数。 ```py writer.writeheader() ``` `writeheader()`方法将标头写入 CSV 文件。 ```py writer.writerow({'first_name' : 'John', 'last_name': 'Smith'}) ``` Python 字典被写入 CSV 文件中的一行。 ```py $ cat names.csv first_name,last_name John,Smith Robert,Brown Julia,Griffin ``` 这是输出。 ## Python CSV 自定义方言 使用`csv.register_dialect()`方法创建自定义方言。 `custom_dialect.py` ```py #!/usr/bin/python3 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`选项指定方言。 ```py $ cat items3.csv pens#4 plates#2 bottles#4 cups#1 ``` 这是输出。 在本教程中,我们使用 Python 处理 CSV。 您可能也会对以下相关教程感兴趣: [Python 教程](/lang/python/), [Python 列表推导式](/articles/pythonlistcomprehensions/), [PrettyTable 教程](/python/prettytable/), [PyMongo 教程](/python/pymongo/), [Python SimpleJson 教程](/python/simplejson/), [OpenPyXL 教程](/articles/openpyxl/), [Python Requests 教程](/web/pythonrequests/)和 [Python 列表推导](/articles/pythonlistcomprehensions/)。