CSV(Comma Separated Values)文件是一种常见的数据存储格式,广泛应用于数据导出和导入。Python 提供了内置的 `csv` 模块,用于读取和写入 CSV 文件。下面是关于如何在 Python 中更全面地使用 CSV 文件的示例和应用。
1. 基本读取
使用 `csv.reader` 可以将 CSV 文件读取为一个可迭代对象,并逐行输出。
import csv
# 使用 open 函数打开 csv 文件
with open('taxi.csv', encoding='utf-8') as file:
csv_reader = csv.reader(file)
# 逐行循环输出
for row in csv_reader:
print(row)
2. 写入 CSV 文件
使用 `csv.writer` 可以将数据写入到 CSV 文件中。
import csv
# 准备一些数据
data = [
['Name', 'Age', 'City'],
['Alice', 30, 'New York'],
['Bob', 25, 'Los Angeles'],
['Charlie', 35, 'Chicago']
]
# 打开 csv 文件,准备写入数据
with open('people.csv', mode='w', encoding='utf-8', newline='') as file:
csv_writer = csv.writer(file)
# 写入数据
for row in data:
csv_writer.writerow(row)
3. 使用 DictReader 和 DictWriter
`csv.DictReader` 和 `csv.DictWriter` 可以更方便地处理 CSV 文件,将每行数据读取为字典或者将字典写入到 CSV 文件中。
import csv
# 使用 DictReader 读取 csv 文件
with open('people.csv', encoding='utf-8') as file:
csv_dict_reader = csv.DictReader(file)
# 逐行循环输出
for row in csv_dict_reader:
print(row)
# 准备一些数据,数据为字典格式
data = [
{'Name': 'David', 'Age': 40, 'City': 'Houston'},
{'Name': 'Eva', 'Age': 28, 'City': 'Seattle'}
]
# 使用 DictWriter 写入 csv 文件
with open('people_new.csv', mode='w', encoding='utf-8', newline='') as file:
fieldnames = ['Name', 'Age', 'City']
csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
# 写入表头
csv_dict_writer.writeheader()
# 写入数据
for row in data:
csv_dict_writer.writerow(row)
4. 读取和写入包含特殊字符的 CSV 文件
使用 `csv` 模块可以指定不同的分隔符和引用符,以处理包含特殊字符的 CSV 文件。
import csv
# 准备一些数据,包含特殊字符
data = [
['Name', 'Age', 'Quote'],
['Alice', 30, 'Hello, "World"!'],
['Bob', 25, 'Goodbye, World!']
]
# 使用不同的分隔符和引用符写入 csv 文件
with open('quotes.csv', mode='w', encoding='utf-8', newline='') as file:
csv_writer = csv.writer(file, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in data:
csv_writer.writerow(row)
# 读取包含特殊字符的 csv 文件
with open('quotes.csv', encoding='utf-8') as file:
csv_reader = csv.reader(file, delimiter=';', quotechar='"')
for row in csv_reader:
print(row)
5. CSV 文件的高级应用
5.1 数据过滤和处理
可以通过读取 CSV 文件并应用过滤条件来处理数据。例如,过滤出年龄大于30的人。
import csv
with open('people.csv', encoding='utf-8') as file:
csv_reader = csv.reader(file)
header = next(csv_reader) # 读取表头
filtered_data = [header]
for row in csv_reader:
age = int(row[1])
if age > 30:
filtered_data.append(row)
# 将过滤后的数据写入新的 csv 文件
with open('filtered_people.csv', mode='w', encoding='utf-8', newline='') as file:
csv_writer = csv.writer(file)
for row in filtered_data:
csv_writer.writerow(row)
5.2 数据统计
可以通过读取 CSV 文件并进行数据统计。例如,统计不同城市的人数。
import csv
from collections import Counter
with open('people.csv', encoding='utf-8') as file:
csv_reader = csv.reader(file)
header = next(csv_reader) # 读取表头
cities = [row[2] for row in csv_reader]
city_count = Counter(cities)
print(city_count)
5.3 数据可视化
可以使用数据可视化库(如 matplotlib)将 CSV 数据进行可视化展示。
import csv
import matplotlib.pyplot as plt
ages = []
with open('people.csv', encoding='utf-8') as file:
csv_reader = csv.reader(file)
header = next(csv_reader) # 读取表头
for row in csv_reader:
ages.append(int(row[1]))
plt.hist(ages, bins=5, edgecolor='black')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.title('Age Distribution')
plt.show()
这些示例展示了如何使用 Python 的 `csv` 模块来处理 CSV 文件,包括基本的读取和写入操作,以及更高级的应用如数据过滤、统计和可视化。掌握这些技巧可以有效地处理和分析 CSV 格式的数据。