Skip to main content
 首页 » 编程设计

python之类型错误 : 'generator' object is not subscriptable, csv 文件

2025年05月04日16虾米姐

我在尝试在多个 csv 文件中制作信息列表时收到类型错误:'generator' 对象不可订阅,对它们进行排序以便获得我需要的信息并将该信息放入新的 .xlsx 文件中。我想知道这里是否有人可以帮助我解决我出错的地方。是无法访问 csv 文件还是我的代码有问题? (我没有添加完整的代码,只添加了出现错误的代码)

代码:

import csv 
import operator 
from openpyxl import Workbook, load_workbook 
import os 
import logging 
 
def opencsv(csvfile): 
    csvdata = [] 
    with open(csvfile, encoding='utf-8-sig') as csv_input: 
        try: 
            reader = csv.reader(csv_input, delimiter=';') 
            for row in reader: 
                key_1 = row[0] 
                key_2 = row[1] 
                1_2 = key_1.split(';') 
                2_1 = key_2.split(';') 
 
 
                csvdata.append(list+link) 
                sortedlist = sorted(csvdata, key=operator.itemgetter(0),  
                reverse=False) 
        return sortedlist 
    finally: 
        csv_input.close() 
 
def copycsv(excel_file, csvfile): 
    rel_path_xlsx = r'C:\Myfolder\xlsx' 
rel_path_csv = r'C:\Myfolder\CSV' 
wb1 = load_workbook(rel_path_xlsx+"\\"+excel_file) 
wb2 = Workbook() 
ws1 = wb1.active 
ws2 = wb2.active 
 
sortedlist = opencsv(rel_path_csv+"\\"+csvfile) 
listed = sorted(sortedlist, key=operator.itemgetter(0), reverse=False) 
for info in listed: 
    ws2.append(info) 
 
col_v = ws2.columns[0] #line 39, error 
col_n = ws2.columns[1]  
 
for idx, cell in enumerate(col_v, 1): 
    ws1.cell(row=idx, column=4).value = cell.value 
 
for idx, cell in enumerate(col_n, 1): 
    ws1.cell(row=idx, column=5).value = cell.value 
 
wb1.save(r"C:\Myfolder"+"\\"+"file_"+excel_file) 
 
 
def copyxlsx(rel_path_xlsx, rel_path_csv): 
    for filename in zip(sorted(os.listdir(rel_path_xlsx)),  
    sorted(os.listdir(rel_path_csv))): 
    print(filename[0], filename[1]) 
    copycsv(filename[0], filename[1]) #line 55, error 
 
Traceback (most recent call last): 
line 55, in copyxlsx 
   copycsv(filename[0], filename[1]) 
line 39, in copycsv 
   col_v =ws2.columns[0] 
TypeError: 'generator' object is not subscriptable 

我是 python 的新手,所以非常感谢任何帮助!在 Python3.4.1 中工作

请您参考如下方法:

worksheet.columns 返回生成器(如错误​​所示)。您需要将其转换为可订阅对象(即列表或元组)以便按索引获取列:

cols = tuple(ws2.columns) 
col_v = cols[0] 
col_n = cols[1]  

或者更好,假设只有 2 列:

col_v, col_n = tuple(ws2.columns) 

或者如果有超过 2 列,您不关心其余部分并使用 Python 3:

col_v, col_n, *_ = tuple(ws2.columns) 

注意这会在内存中创建一个无用的列表。你也可以做
col_v, col_n = tuple(ws2.columns)[:2] 在 Python 2 和 3 中都有效,不会在内存中创建不必要的列表。