商城首页欢迎来到中国正版软件门户

您的位置:首页 >Python 中正确复制 CSV 读取器数据为列表的完整教程

Python 中正确复制 CSV 读取器数据为列表的完整教程

  发布于2026-04-07 阅读(0)

扫一扫,手机访问

Python 中正确复制 CSV 读取器数据为列表的完整教程

本文详解如何将 csv.reader 对象安全转换并复制为普通 Python 列表,避免误用 dict.copy() 导致的 TypeError,并提供可直接运行的代码示例与关键注意事项。

本文详解如何将 `csv.reader` 对象安全转换并复制为普通 Python 列表,避免误用 `dict.copy()` 导致的 TypeError,并提供可直接运行的代码示例与关键注意事项。

在 Python 中,csv.reader 返回的是一个迭代器对象(_csv.reader),而非字典(dict)或列表(list)。因此,直接调用 dict.copy(csv_reader) 会触发 TypeError——因为 dict.copy() 是类方法,仅适用于字典实例,不能作用于 CSV 迭代器。同样,copy.copy() 或 copy.deepcopy() 虽然可用于大多数对象,但对已耗尽的迭代器无效,且无法“复制”其一次性遍历特性。

正确做法是:先将 csv.reader 迭代器显式转换为列表,再对列表进行复制。列表支持 .copy() 方法(浅拷贝),也兼容 copy.copy() 和切片 [:] 等方式:

import csv

with open(r'C:\data\LEARNING\PHYTON\excel\MySQL\texperts\supplier.csv', 'r', encoding='utf-8') as csv_data:
    csv_reader = csv.reader(csv_data, delimiter=',')
    # ✅ 正确:将迭代器转为列表(一次性读取全部行)
    csv_data_list = list(csv_reader)

    # ✅ 三种等效的复制方式(均生成新列表对象)
    csv_data_list_copy = csv_data_list.copy()           # 推荐:清晰、高效
    # csv_data_list_copy = copy.copy(csv_data_list)     # 需 import copy
    # csv_data_list_copy = csv_data_list[:]             # 简洁,但语义稍弱

# 此时可安全操作副本,例如追加新行
row1 = ['new_id', 'new_name', 'new_email']
csv_data_list_copy.append(row1)

print(f"原始数据行数: {len(csv_data_list)}")
print(f"副本行数: {len(csv_data_list_copy)}")

⚠️ 关键注意事项:

  • 路径字符串建议使用原始字符串(r'')或双反斜杠,避免 Windows 路径中的 \n、\t 等转义错误;
  • 务必指定 encoding='utf-8'(尤其处理中文 CSV 时),防止 UnicodeDecodeError;
  • csv.reader 是单次消耗型迭代器:一旦调用 list(csv_reader),原 csv_reader 就已耗尽,不可再次遍历;
  • list.copy() 是浅拷贝——若 CSV 行中包含嵌套可变对象(如字典或列表),需用 copy.deepcopy(),但标准 CSV 行均为字符串列表,浅拷贝完全足够;
  • PyCharm 中 import copy 显示灰色,是因为该模块未在当前作用域被显式调用(非错误),只要代码中实际使用了 copy.copy() 就会激活。

总结:复制 CSV 数据的核心逻辑是「迭代器 → 列表 → 复制列表」,杜绝对非字典对象调用 dict.copy()。掌握这一模式,即可稳健构建多份独立数据副本,用于分类、过滤、写入不同文件等后续操作。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注