Python TypeError:必须是字符串,而不是列表
我确信这已经在StackOverflow和Google之间发布了,但我无法找到解决方案,因为我不知道要搜索的确切术语 我会尽量说得具体一些。我有一堆zip文件,里面有报告,名字像Process123456789results.csv。我需要将CSV文件重命名为其父ZIP文件夹的名称 因此,为了便于理解,我需要将此转换为:Python TypeError:必须是字符串,而不是列表,python,list,formatting,output,Python,List,Formatting,Output,我确信这已经在StackOverflow和Google之间发布了,但我无法找到解决方案,因为我不知道要搜索的确切术语 我会尽量说得具体一些。我有一堆zip文件,里面有报告,名字像Process123456789results.csv。我需要将CSV文件重命名为其父ZIP文件夹的名称 因此,为了便于理解,我需要将此转换为: IntendedName.zip-->进程123456789Results.csv 为此: IntendedName.csv 为此,我正在使用ZipFile,我的脚本看
- IntendedName.zip-->进程123456789Results.csv
- IntendedName.csv
Extracted = []
x = 0
for attachment in zip:
with zipfile.ZipFile("IntendedName.zip", "r") as z:
z.extractall()
Extracted.extend(z.namelist())
os.rename(Extracted[x], "IntendedName.csv")
os.remove("IntendedName.zip")
x +=1
编辑:删除多余的括号。
再次编辑:添加了完整的解决方案。谢谢你们的帮助 我认为问题在于这一行:
Extracted = [z.namelist()]
我猜namelist()
已经返回了一个列表,所以您将列表放在列表中。我想你的意思是:
Extracted = z.namelist()
对于
os.rename(Extracted[x],“IntendedName.csv”)
,Extracted[0]
似乎指向一个名称列表。如果您想遍历名称列表,只需将您的作业提取为Extracted=z.namelist()
。当您执行Extracted=[z.namelist()]
时,它会将列表包装在列表中,因此当您访问0索引元素将其传递到os.rename
时,实际上是将列表作为第一个参数传递,而不是预期的字符串。谢谢。然而,我最初尝试去掉括号,并在这样做时注意到我得到了一个“索引超出范围”错误。调试器向我显示,它不是向提取列表添加新值,而是实际上覆盖了“提取”的值。结果是一个文件被正确重命名,然后在第二次迭代中出现索引错误。在看了你的答案后,我开始更多地研究列表提供的不同选项。我尝试使用“.append”,但无法使其工作。然后我尝试了“.extend”,它成功地工作了。我将用工作代码更新我的主要帖子,以备将来参考。可能重复的
Extracted = z.namelist()