Упорядочить файлы по имени в категориальных подпапках в Python - PullRequest
2 голосов
/ 10 ноября 2019

Мне нужен алгоритм, который организует некоторые файлы в каталоге по имени файла.

Я написал несколько категорий:

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)

Можете ли вы помочь мне?

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Вы должны проверить, появляется ли любой продуктов питания в вашей категории 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)
0 голосов
/ 10 ноября 2019

Это правильная идея. Я бы использовал словарь, чтобы упростить управление категориями. Хотя имеет смысл сопоставлять категории с ключевыми словами для организационных целей, поиск будет быстрее за счет изменения мнения. На этом этапе мы можем разделить каждое имя файла на несловарные символы, проверить соответствие таблицы поиска ключевых слов, создать любые несуществующие каталоги и переместить файлы по мере необходимости.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...