使用 Python 创建递增的文件夹名称
Posted
技术标签:
【中文标题】使用 Python 创建递增的文件夹名称【英文标题】:Using Python to create incrementing folder names 【发布时间】:2014-08-06 14:00:30 【问题描述】:我正在尝试将目录中的所有文件放入它自己的单独文件夹中。当试图声明变量“文件夹”时,我枚举文件列表并尝试将枚举列表编号附加到文件夹名称的末尾,因此文件夹看起来像...... FOLDER_1, 文件夹_2, FOLDER_3, 其中尾随数字是通过枚举目录中的文件生成的。
但是我下面的代码将它们全部列为“FOLDER_0”,然后遇到覆盖错误,我的增量似乎不起作用,非常感谢我做错的任何方向。
PATH = "C:/Temp/"
def main():
files = [ join(PATH, f) for f in listdir(PATH) if isfile(join(PATH, f)) ]
for i, f in enumerate (files):
folders = [ PATH+"FOLDER_"+str(i)+"/" for f in files ]
【问题讨论】:
确切的错误是什么? 在你的列表理解之后files
是什么样的?
你希望在 for 循环之后的 folders
中有什么?现在你遍历文件但在任何地方都使用f
,即最后一行相当于文件夹= [PATH+“FOLDER_”+str(i)+“/”] * len(files),这可能不是你想要的。此外,您使用了变量f
两次(外循环和内循环),这确实可能会导致问题。
每次执行for
循环时,都会创建一个新变量folders
。您必须在for
循环之前初始化一个空变量folders = []
,然后使用list.append()
方法或+=
运算符添加一个新项:folders.append([ PATH+"FOLDER_"+str(i)+"/" for f in files ])
但是,我看到了更多的差异。如果不需要,为什么要使用enumerate
?您也可以使用:for i in range(len(files))
或为files
变量创建一个单行函数:folders = [ PATH+"FOLDER_"+str(i)+"/" for i in range(len(files)) ]
【参考方案1】:
目前尚不清楚您的最终目标是什么,但根据您在代码中显示的内容和在您的问题中所写的内容,我想我可以尝试一下。
要启动 python 使用从零开始的索引,因此与enumerate
中的第一项对应的第一个值将是0
。
接下来你的for
循环相当于做这样的事情:
folders = [PATH + "FOLDER_" + str(len(files))] * len(files)
所以对于...
files=["file1", "file2"]
你会得到...
folders=["FOLDER_1", "FOLDER_1"]
folders
中创建每个文件夹,您会收到一个 OSError
,告诉您正在创建一个刚刚创建的文件夹。
如果您想为目录中的每个文件创建一个文件夹,我会尝试将您的代码修改为这个方向:
PATH = "C:/Temp/"
def main():
files = [join(PATH, f) for f in listdir(PATH) if isfile(join(PATH, f))]
folders = [join(PATH, "FOLDER_".format(i + 1)) for i, _ in enumerate(files)]
...
然后,如果您要在 folders
中创建所有文件夹,请检查它们是否还没有 exist
【讨论】:
非常感谢 MrAlias,您的解决方案正是我想要的,而且比我原来的方法更有效。干杯!以上是关于使用 Python 创建递增的文件夹名称的主要内容,如果未能解决你的问题,请参考以下文章