python - TypeError : Must be String, 未列出

标签 python list formatting output

我确定这已经发布在 StackOverflow 和 Google 之间的某处,但我无法找到解决方案,因为我不知道要搜索的确切术语。

我将尝试尽可能具体。我有一堆 zip 文件,里面有报告,名称如 Process123456789results.csv。我需要将 CSV 文件重命名为其父 ZIP 文件夹的名称。

所以为了便于理解我需要把这个:

  • IntendedName.zip --> Process123456789results.csv

进入这个:

  • 预期名称.csv

为此,我使用 ZipFile,我的脚本看起来有点像这样(这里的程序员非常缺乏经验,所以欢迎所有批评):

Extracted = []
x = 0

for attachment in zip:
with zipfile.ZipFile("IntendedName.zip", "r") as z:
    z.extractall()
    Extracted = [z.namelist()]
    os.rename(Extracted[x], "IntendedName.csv")
os.remove("IntendedName.zip")
x +=1

理想的最终结果是:

  1. 提取 CSV

  2. 将 CSV 重命名为 ZIP 文件名。

  3. 清理 zip 文件,只留下重命名的 CSV。

我的问题:

  1. 运行我的代码时出现以下错误必须是字符串,而不是列表。我已经尝试从几个不同的角度来解决这个问题,但无法完全解决这个问题。我知道这不是一回事,但我正在阅读 C 中的“类型转换”。我可以在这里做类似的事情吗?我打算获取所有名称的列表并将其导出到一个文本文件并使用它..但这感觉像是一种肮脏的方式来解决这个问题。

  2. 我不知道这是否会成为问题,但使用调试器我可以看到“Extracted”的值最终看起来像这样:[u'Process123456789results.csv'] 当从 z.namelist() 调用时,我认为(未确认)会在修复数字 1 后破坏脚本,因为当我尝试重命名文件时,它会无法通过上面的粗体名称找到文件,而不仅仅是“Process123456789results.csv”。是否可以通过删除无关字符来修改列表?这可能只是我想多了。我什至不知道这是否是一个问题,因为我无法通过上述问题。

如果我对某些事情不清楚,我深表歉意。我会尽力回答任何问题。如果有帮助,我可以发布我正在处理的整个代码。不过,它并不十分漂亮。

解决方案:

在得到一些指导后,我能够弄清楚如何解决这个问题。我在上面第 2 条中谈到的问题从来没有成为问题。第 1 条由下面一些非常有帮助的人解决。

我在 Shank 的评论中提到的“索引错误”问题已通过以下代码解决:

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

编辑:删除多余的括号。 再次编辑:添加了一个完整的解决方案。感谢大家的帮助!

最佳答案

对于 os.rename(Extracted[x], "IntendedName.csv")Extracted[0] 似乎指向一个名称列表。如果您想遍历名单,只需将您的分配设为 Extracted = z.namelist()。当您执行 Extracted = [z.namelist()] 时,它会将列表包装在列表中,因此当您访问 0 索引元素以将其传递到 os.rename 时,您实际上传递的是一个列表作为第一个参数,而不是它期望的字符串。

关于python - TypeError : Must be String, 未列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29478086/

相关文章:

python - 有没有更pythonic的方式来构建这本字典?

python - list(file) 附加\n到每一行

r - 从列表中的所有矩阵中获取最大值

C# 字符串自定义格式添加尾随零

python - 在 python 中转置/旋转矩阵 block

java - 是否可以在StanfordNLP for Python 上训练模型并在基于Java 的CoreNLP 中使用它?

JQuery 将文本更改为标题

c++ - ostream showbase 不显示零值的 "0x"

python - 无法使用Windows PowerShell安装Jupyter Notebook,因为pip不会升级到20.1版

java - 将泛型 T 转换为 List<T>