繁体   English   中英

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

[英]Organize files by name into categorical subfolders in 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)

你能帮助我吗?

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

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

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

这是正确的想法。 我会使用字典使类别更易于操作。 虽然出于组织目的将 map 类别转换为关键字是有意义的,但通过反转 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM