我确定这已经发布到StackOverflow和Google之间,但我无法找到解决方案,因为我不知道搜索的确切术语。TypeError:必须是字符串,而不是列表
我会尽量做到尽可能具体。我有一堆zip文件,里面有一些名为Process123456789results.csv的报告。我需要将CSV文件重命名为其父ZIP文件夹的名称。
所以,为了便于理解,我需要把这个:
- IntendedName.zip - > Process123456789results.csv
进入这个:
- IntendedName.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
理想情况下,最终的结果将是:
提取CSV
重命名CSV到ZIP文件的名称。
清理压缩文件只留下重命名的CSV。
我的问题:
运行我的代码,我给出以下错误必须是字符串,而不是列出。我试图从几个不同的角度来解决这个问题,但无法完全解决这个问题。我知道这不是一回事,但我正在阅读有关C语言中的“类型转换”。有没有类似的东西我可以在这里做?我将获得所有名称的列表并将其导出到一个文本文件并使用它。但是,这感觉像一个肮脏的方式来解决这个问题。
我不知道这是否会是一个问题,但使用调试器,我可以看到的“提取”的价值最终看起来是这样的:[u'Process123456789results.csv']当它从称为z.namelist()其中我认为(未经证实)会在编号1被修复后破坏脚本,因为当我尝试重命名文件时,它将无法通过上面的粗体名称找到文件,而不仅仅是“Process123456789results .csv”文件。是否可以通过删除无关字符来修改列表?这可能只是我的想法。我甚至不知道这是否是一个问题,因为我无法通过上述问题。
我很抱歉,如果我一直不清楚的东西。我会尽力回答任何问题。如果可以帮助,我可以发布我正在处理的整个代码。虽然这并不完美。
SOLUTION:
得到一些方向我能弄清楚如何解决这个之后。我在上面讨论的第二个问题从未成为一个问题。 1号由以下一些非常有帮助的个人解决。
的“索引超出错误的”我的意见柄提到的问题,用下面的代码解析:
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想要一个字符串而不是一个列表。 – Corey
可能重复的[TypeError:必须是str,而不是列表](https://stackoverflow.com/questions/30612799/typeerror-must-be-str-not-list) – jww