我相信这个问题已经在StackOverflow和Google之间的某个地方发布过,但我无法找到解决方案,因为我不知道要搜索的确切术语。
我将尽可能具体地说明。我有一堆zip文件,里面包含名为Process123456789results.csv的报告。我需要将CSV文件重命名为其父ZIP文件的名称。
因此,为了便于理解,我需要将这个:
IntendedName.zip --> Process123456789results.csv
变成这个:
IntendedName.csv
为了做到这一点,我使用ZipFile,我的脚本看起来有点像这样(非常没有经验的程序员在这里,欢迎批评)。
理想情况下,最终结果将是:
解决方案:
在得到一些指导后,我能够找出如何解决这个问题。下面的一些非常有帮助的人解决了第1个问题。
我在评论中提到的“索引超出错误”问题是通过以下代码解决的:
我将尽可能具体地说明。我有一堆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”的值在被从z.namelist()调用时看起来像这样:[u'Process123456789results.csv'],这可能(未经确认)会在解决第1个问题后破坏脚本,因为当我尝试重命名文件时,它将无法按粗体名称查找文件,而不仅仅是“Process123456789results.csv”。是否可能通过删除多余的字符来修改列表?这可能只是我过度思考了。我甚至不知道是否存在此问题,因为我无法解决上述问题。
解决方案:
在得到一些指导后,我能够找出如何解决这个问题。下面的一些非常有帮助的人解决了第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
编辑:去掉了冗余的括号。 再次编辑:添加了完整的解决方案。谢谢大家的帮助!