使用Python创建递增的文件夹名称

0 投票
1 回答
2481 浏览
提问于 2025-04-18 09:58

我想把一个文件夹里的所有文件放到各自的单独文件夹里。当我试着声明一个叫做'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中的所有文件夹,记得检查它们是否已经存在

撰写回答