跳转到内容

Python Csv 文件

来自代码酷

Python CSV文件处理[编辑 | 编辑源代码]

CSV(Comma-Separated Values)文件是一种以纯文本形式存储表格数据的简单文件格式,被广泛应用于数据交换和存储。Python通过内置的`csv`模块提供了强大的CSV文件处理能力。

基本概念[编辑 | 编辑源代码]

CSV文件由记录(行)组成,每条记录包含由分隔符(通常是逗号)隔开的字段。例如: ```csv Name,Age,Occupation Alice,28,Engineer Bob,32,Teacher ```

Python处理CSV的主要方式:

  • 读取:将CSV数据加载到Python数据结构中
  • 写入:将Python数据写入CSV文件
  • 修改:对现有CSV文件进行更新操作

核心模块[编辑 | 编辑源代码]

Python的`csv`模块提供两种主要对象:

  • `csv.reader` - 返回行迭代器
  • `csv.writer` - 写入文件对象
  • `csv.DictReader`/`csv.DictWriter` - 以字典形式处理数据

基本读写示例[编辑 | 编辑源代码]

import csv

# 写入CSV文件
with open('data.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["Name", "Age", "City"])
    writer.writerow(["Alice", 28, "New York"])
    writer.writerow(["Bob", 32, "Chicago"])

# 读取CSV文件
with open('data.csv', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

输出: ```python ['Name', 'Age', 'City'] ['Alice', '28', 'New York'] ['Bob', '32', 'Chicago'] ```

字典形式处理[编辑 | 编辑源代码]

更推荐使用DictReader/DictWriter,它们将行作为字典处理:

# 使用DictWriter写入
with open('data_dict.csv', 'w', newline='') as file:
    fieldnames = ['Name', 'Age', 'City']
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'Name': 'Alice', 'Age': 28, 'City': 'New York'})
    writer.writerow({'Name': 'Bob', 'Age': 32, 'City': 'Chicago'})

# 使用DictReader读取
with open('data_dict.csv', 'r') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(f"{row['Name']} is {row['Age']} years old from {row['City']}")

输出: ```python Alice is 28 years old from New York Bob is 32 years old from Chicago ```

高级特性[编辑 | 编辑源代码]

自定义分隔符[编辑 | 编辑源代码]

处理非逗号分隔的CSV文件:

# 分号分隔的CSV
with open('semicolon.csv', 'w', newline='') as file:
    writer = csv.writer(file, delimiter=';')
    writer.writerow(["Name", "Age", "City"])
    writer.writerow(["Alice", 28, "New York"])

引用规则[编辑 | 编辑源代码]

处理包含特殊字符的字段:

# 引用所有字段
writer = csv.writer(file, quoting=csv.QUOTE_ALL)

# 引用非数字字段
writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC)

# 自定义引号字符
writer = csv.writer(file, quotechar="'")

方言(Dialect)[编辑 | 编辑源代码]

预定义格式配置:

csv.register_dialect('unix', delimiter='|', quoting=csv.QUOTE_MINIMAL)
with open('unix.csv', 'w', newline='') as file:
    writer = csv.writer(file, dialect='unix')
    writer.writerow(["Name", "Age", "City"])

实际应用案例[编辑 | 编辑源代码]

数据分析预处理[编辑 | 编辑源代码]

import csv
from collections import defaultdict

# 统计各城市人数
city_counts = defaultdict(int)
with open('data.csv', 'r') as file:
    reader = csv.DictReader(file)
    for row in reader:
        city_counts[row['City']] += 1

print("城市分布统计:", dict(city_counts))

CSV与JSON转换[编辑 | 编辑源代码]

import csv
import json

# CSV转JSON
data = []
with open('data.csv', 'r') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        data.append(row)

with open('data.json', 'w') as jsonfile:
    json.dump(data, jsonfile, indent=2)

性能优化[编辑 | 编辑源代码]

对于大型CSV文件:

  • 使用生成器处理数据
  • 考虑`pandas`库处理超大数据集
  • 分块读取处理

生成器示例[编辑 | 编辑源代码]

def read_large_csv(file_path):
    with open(file_path, 'r') as file:
        reader = csv.DictReader(file)
        for row in reader:
            yield row

for record in read_large_csv('large_data.csv'):
    process_record(record)  # 自定义处理函数

常见问题[编辑 | 编辑源代码]

问题 解决方案
Unicode编码错误 使用`encoding='utf-8'`参数打开文件
空行问题 使用`newline=`参数
字段包含分隔符 确保正确引用字段
内存不足 使用生成器或分块处理

最佳实践[编辑 | 编辑源代码]

  • 始终明确指定编码格式
  • 处理外部数据时验证字段
  • 考虑使用`try-except`处理异常
  • 对于复杂操作,考虑使用`pandas`库

可视化数据流[编辑 | 编辑源代码]

graph TD A[原始CSV文件] --> B{csv.reader} B --> C[行迭代器] C --> D[数据处理] D --> E[修改后的数据] E --> F{csv.writer} F --> G[新CSV文件]

数学表示[编辑 | 编辑源代码]

CSV可以表示为二维数据矩阵: CSV=[f1,1f1,2f1,nf2,1f2,2f2,nfm,1fm,2fm,n] 其中fi,j表示第i行第j列的字段值。

总结[编辑 | 编辑源代码]

Python的`csv`模块提供了灵活强大的CSV文件处理能力,适合从简单到复杂的各种应用场景。通过掌握基本读写操作、字典处理方式以及高级配置选项,开发者可以高效地处理各种CSV数据交换需求。