Python自定义read_csv方法报TypeError: 'type' object is not iterable求助
错误定位与修复方案
核心报错原因
你触发TypeError: 'type' object is not iterable的直接原因是循环遍历的对象写错了:
你定义的函数入参名为input,但循环行写的是for file in list,此处的list是Python的内置列表类型,并非你传入的文件列表,遍历类型对象自然会报错。
其他存在的问题
- 函数命名冲突:自定义函数名
read_csv和你导入的Pandas自带的read_csv方法重名,运行时会出现调用逻辑混乱,属于不规范命名。 - 结果覆盖问题:循环内每次都对
tradeList重新赋值,最终只会返回最后一个文件的指定列结果,无法实现「为每个文件返回指定列取值列表」的需求。
修正后的完整代码
import json, requests, urllib.parse, re import pandas as pd from termcolor import colored import numpy as np from glob import glob import os # Set Up dateinplay = "2021-09-27" cdwenv1 = "cdwu" # Note that it only works with the http version right now cdwenv2 = "cdwp" # Control Env, usually cdwp CoreMurexFilesLoc = r"J:\Gerard\Release197\UAT\Files\Core" # Dev Static cdwenv = "" # leave empty files = glob(CoreMurexFilesLoc + "\\*") # index 1: MHEU_TradeCash_ | 2: TradeCash_ tradeCashfiles = [i for i in files if "TradeCash" in i] # index 1: MHEU_Trade_ | 2: Trade_ tradeFiles = [i for i in files if "Trade_" in i] mheu_tradeCash = tradeCashfiles[1] tradeCash = tradeCashfiles[2] mheu_trade = tradeFiles[1] trade = tradeFiles[2] filesList = [mheu_trade, trade, mheu_tradeCash, tradeCash] # 改个不冲突的函数名,入参名也做语义化修改,避免和内置关键字冲突 def get_counterparty_list(file_list: list): # 初始化结果列表存储所有文件的取值 all_trade_list = [] for file in file_list: df_trade = pd.read_csv( file, delimiter="|", index_col=False, dtype="unicode", ) # Drop any blank fields df_trade.dropna(subset=["MurexCounterpartyRef"], inplace=True) tradeList = df_trade["MurexCounterpartyRef"].tolist() # 把当前文件的结果追加到总结果中,如果需要区分对应文件,也可以用字典存储 all_trade_list.extend(tradeList) return all_trade_list result = get_counterparty_list(filesList) print(result)
内容的提问来源于stack exchange,提问作者Bruno Lorena
相关产品推荐
相关产品推荐

