在Python中,按名称将文件组织到分类子文件夹中

2024-04-27 09:13:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个算法,组织在一个目录中的一些文件的名称的文件

我写了一些分类:

Bread = ["bread", "pizza", "spaghetti"]
Meat = ["hamburger", "meat", "porkchop"]

如果文件名是hamburger recipe.txt,我需要将此文件移动到名为Meat的特定目录

如果另一个文件名为bread with vegetables.doc,则此文件将被移动到名为Bread的文件夹中

我试着写这个,但没用:

meat = ["hamburger", "meat", "porkchop"]

for filename in os.listdir(path):
    if meat in filename:
        os.rename(filename, "Meat/" + filename)

你能帮我吗


Tags: 文件in目录名称算法os文件名分类
2条回答

您必须测试您的meat类别中食品的any是否出现在文件名中:

meat = ["hamburger", "meat", "porkchop"]

for filename in os.listdir(path):
    if any(food in filename for food in meat):
        os.rename(filename, "Meat/" + filename)

这是正确的想法。我会用字典使分类更容易操作。尽管出于组织目的将类别映射到关键字是有意义的,但是通过反转dict查找会更快。此时,我们可以将每个文件名拆分为非单词字符,检查关键字查找表是否匹配,创建任何不存在的目录,并根据需要移动文件

import os
import re

path = "."
categories = {
    "meat": ["hamburger", "meat", "porkchop"],
    "bread": ["bread", "pizza", "spaghetti"]
} 
keywords = {}

for k, v in categories.items():
    for x in v:
        keywords[x] = k

for filename in [x for x in os.listdir(path) if os.path.isfile(x)]:
    for term in [x for x in re.split(r"\W+", filename.lower()) if x in keywords]:
        dest = os.path.join(keywords[term], filename)
        src = os.path.join(path, filename)

        try:
            if not os.path.exists(keywords[term]):
                os.makedirs(keywords[term])

            os.rename(src, dest)
        except (FileNotFoundError, FileExistsError) as e:
            print(e)

相关问题 更多 >