You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中csv.reader对象复制报错及copy模块相关问题求助

问题解决:TypeError: descriptor 'copy' for 'dict' objects doesn't apply to a '_csv.reader' object

核心问题分析

  • csv.reader()返回的是迭代器对象(类型为_csv.reader),不是字典,也不是可直接复制的列表对象,所以用dict.copy()操作它必然报错。
  • 导入的copy模块显示灰色,是因为代码里没实际用到它,PyCharm会自动标记未使用的导入。
  • PyCharm设置里找不到copy包,是因为copy是Python标准库的一部分,不需要额外安装,第三方包列表里不会显示它。

正确解决方案

要处理CSV数据并进行复制操作,需先把迭代器转成列表(迭代器只能遍历一次,转成列表后可反复操作),再执行复制或修改:

修改后的代码

import csv

count1 = 0
category = []  # 原代码未定义,补充变量初始化
countlist = []  # 原代码未定义,补充变量初始化

with open('C:\\data\\LEARNING\\PHYTON\\excel\\MySQL\\texperts\\supplier.csv', 'r') as csv_data:
    # 将csv迭代器转为列表,保存所有行数据
    csv_rows = list(csv.reader(csv_data, delimiter=','))
    # 复制列表(三种方式任选其一)
    csv_rows_copy = csv_rows.copy()  # 列表自带的copy方法
    # 或者 csv_rows_copy = copy.copy(csv_rows)  # 此时copy模块会被用到,灰色标记消失
    # 或者 csv_rows_copy = csv_rows[:]  # 切片语法复制列表
    
    # 定义要添加的行(原代码未定义row1,补充定义)
    row1 = ["new_item1", "new_item2"]
    csv_rows_copy.append(row1)

print(category)
print(countlist)
# with语句会自动关闭文件,无需手动调用csv_data.close()

关键说明

  • 迭代器特性:csv.reader生成的迭代器只能被遍历一次,遍历后就会耗尽,转成列表可永久保存所有行数据。
  • 列表复制的三种常用方式:
    1. 列表自带的copy()方法
    2. copy.copy()(浅复制,适用于普通列表)
    3. 切片语法list[:]

内容的提问来源于stack exchange,提问作者Paul Babin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:47:26