【发布时间】:2015-06-11 06:04:06
【问题描述】:
我确定这已经发布在 StackOverflow 和 Google 之间的某个位置,但我无法找到解决方案,因为我不知道要搜索的确切术语。
我会尽量做到具体。我有一堆 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 文件名。
清理 zip 文件,只留下重命名的 CSV。
我的问题:
运行我的代码时出现以下错误必须是字符串,而不是列表。我已经尝试从几个不同的角度来解决这个问题,但无法完全解决这个问题。我知道这不是一回事,但我正在阅读 C 中的“类型转换”。我可以在这里做类似的事情吗?我打算获取所有名称的列表并将其导出到文本文件并使用它..但这感觉像是一种肮脏的方式来解决这个问题。
我不知道这是否会成为问题,但使用调试器我可以看到“Extracted”的值最终看起来像这样:[u'Process123456789results.csv'] 当从 z.namelist() 调用它时,我认为(未确认)会在编号 1 被修复后破坏脚本,因为当我尝试重命名文件时,它会无法通过上面的粗体名称找到文件,而不仅仅是“Process123456789results.csv”。是否可以通过删除无关字符来修改列表?这可能只是我想多了。我什至不知道这是否是一个问题,因为我无法通过上述问题。
如果我对某些事情不清楚,我深表歉意。我会尽力回答任何问题。如果有帮助,我可以发布我正在处理的整个代码。不过,它并不完全漂亮。
解决方案:
在获得一些方向之后,我能够弄清楚如何解决这个问题。我在上面第 2 点中谈到的问题从未成为问题。第 1 点由以下一些非常有帮助的人解决。
我在对 Shank 的 cmets 中提到的“索引错误”问题已通过以下代码解决:
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
编辑:删除了多余的括号。 再次编辑:添加了完整的解决方案。谢谢大家的帮助!
【问题讨论】:
标签: python list formatting output