使用Python创建递增的文件夹名称
我想把一个文件夹里的所有文件放到各自的单独文件夹里。当我试着声明一个叫做'folders'的变量时,我想把文件列表的编号加到文件夹名字后面,这样文件夹的名字就会像这样: FOLDER_1, FOLDER_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 ]
1 个回答
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
中的所有文件夹,记得检查它们是否已经存在