[英]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.