Python使用str.join()拼接多变量写入CSV报TypeError如何解决
问题根因
str.join()仅支持传入1个可迭代对象(列表、元组等),你最初的写法将11个变量作为独立参数传入,自然触发参数数量不符的报错。- 即使你把变量套进元组/列表也会出现新的报错:你通过
.contents拿到的CX、SDX等变量都是列表类型(哪怕仅含一个内容也是列表),无法直接用于字符串拼接;另外你代码里的EDX = ED.findNext("td").content少写了s,返回的是单个元素,和其他变量类型不一致。 - 额外问题:你已经导入了
csv模块却手动拼接逗号,后续如果字段内容本身包含逗号、引号,会直接导致CSV格式错乱;且你定义的表头有12个字段,实际写入的内容只有11个,会出现列不对齐的问题。
修复方案
前置优化
首先把所有字段提取的写法统一简化,不需要调用.contents,直接用.text属性就能拿到干净的文本字符串:
# 把所有类似CX = IC.findNext("td").contents的写法都改成如下格式 CX = IC.findNext("td").text.strip() SDX = SD.findNext("td").text.strip() EDX = ED.findNext("td").text.strip() # 剩下的NCX、CJX等所有字段都按这个规则改
方法1:最小改动修复原有逻辑
把所有字符串变量整合成一个列表传给join即可,注意补全表头里缺失的Ref字段:
# 按表头顺序排列字段,ref是你代码里提取的Reference值 row = [ref, CX, SDX, EDX, NCX, CJX, LX, POIX, DOIX, NAAX, DOGX, NKX] out_file.write(",".join(row) + "\n")
方法2:改用csv模块写入(更稳定,推荐)
直接用内置csv模块处理写入,自动兼容特殊字符,不需要手动处理join逻辑:
# 修改文件打开和写入逻辑即可 import csv with open('names.csv', 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) # 写表头 writer.writerow(['Ref', 'Start date of Validity', 'country', 'End date of validity', 'Nomenclature code', 'Classification justification', 'Language', 'Place of issue', 'Date of issue', 'Name and address', 'Description', 'keywords']) # 循环内处理完所有字段后,直接写入行 row = [ref, CX, SDX, EDX, NCX, CJX, LX, POIX, DOIX, NAAX, DOGX, NKX] writer.writerow(row)
内容的提问来源于stack exchange,提问作者MxMorrigan
相关产品推荐
相关产品推荐

