Python将CSV转为元组列表时单字符成元素该如何修复
问题根因
你错误地先把7个字段用format拼接成了单个完整字符串,再对这个字符串执行tuple()转换。Python中字符串属于可迭代对象,tuple(字符串)会自动遍历每个字符作为元组的独立元素,这就是你得到单个字符组成元组的直接原因。
修复方案
最小改动修复(仅修改错误代码行)
将原代码中生成item的两行:
item = ('{},{},{},{},{},{},{}'.format(Order_Date, Order_ID, Group, Item_Category, Description, Seller, Item_Total)) final_list.append(tuple(item))
替换为以下代码即可:
# 直接把多个字段放在括号内用逗号分隔,就是标准元组,无需拼接字符串再转换 item = (Order_Date, Order_ID, Group, Item_Category, Description, Seller, Item_Total) final_list.append(item)
更规范的优化方案(使用Python内置csv模块处理)
你已经导入了csv模块但没有使用,手动split(',')拆分CSV会遇到字段内含逗号、转义符等边界问题,用csv模块可以自动处理这类场景,同时用with上下文管理器无需手动关闭文件,完整代码如下:
import csv def list_to_tuple(input_file): final_list = [] with open(input_file, 'r', encoding='utf-8') as csvfile: reader = csv.reader(csvfile) for row in reader: # 批量对每行的所有字段做去空格、转小写处理 processed_row = [col.strip().lower() for col in row] Order_Date = processed_row[0] Order_ID = processed_row[1] Group = processed_row[2] Item_Category = processed_row[3] Description = processed_row[4] Seller = processed_row[-2] Item_Total = processed_row[-1] item = (Order_Date, Order_ID, Group, Item_Category, Description, Seller, Item_Total) final_list.append(item) return final_list input_file = 'orders.csv' final_output = list_to_tuple(input_file) print(final_output)
内容的提问来源于stack exchange,提问作者Geraldo
相关产品推荐
相关产品推荐

