python - Python:将文件移动到名称中包含模式的文件夹
问题描述
想要自动化排序过程。却搞不定。在同一个文件夹中有大约一千个具有相同扩展名的文件。想要将它们分类到不同的文件夹,例如:XXpattern1XX.XXX 文件到 [pattern1] 文件夹,Xpattern2XXX.XXX 文件到 [pattern2] 文件夹,pattern3XXXX.XXX 文件到 [pattern3] 文件夹等等。
有一个来自 SO 的脚本,但找不到原始帖子。但还没有弄清楚如何改变它。
#!/usr/bin/env python3
import os
import subprocess
import shutil
# --------------------------------------------------------
reorg_dir = "/path/to/directory_to_reorganize"
exclude = (".jpg") # for example
remove_emptyfolders = True
# ---------------------------------------------------------
for root, dirs, files in os.walk(reorg_dir):
for name in files:
subject = root+"/"+name
if name.startswith("."):
extension = ".hidden_files"
elif not "." in name:
extension = ".without_extension"
else:
extension = name[name.rfind("."):]
if not extension in exclude:
new_dir = reorg_dir+"/"+extension[1:]
if not os.path.exists(new_dir):
os.mkdir(new_dir)
n = 1; name_orig = name
while os.path.exists(new_dir+"/"+name):
name = "duplicate_"+str(n)+"_"+name_orig
n = n+1
newfile = new_dir+"/"+name
shutil.move(subject, newfile)
def cleanup():
filelist = []
for root, dirs, files in os.walk(reorg_dir):
for name in files:
filelist.append(root+"/"+name)
directories = [item[0] for item in os.walk(reorg_dir)]
for dr in directories:
matches = [item for item in filelist if dr in item]
if len(matches) == 0:
try:
shutil.rmtree(dr)
except FileNotFoundError:
pass
if remove_emptyfolders == True:
cleanup()
谢谢
解决方案
您可以尝试以下方法:
patterns = ['pattern1', 'pattern2', ...]
folders = [os.path.join(main_directory, pattern) for pattern in patterns]
# build folders
for folder in folders:
if not os.path.exists(folder):
os.makedirs(folder)
# move files in corresponding folders
for file in files: # files is the list of all your file paths
for pattern, folder in zip(patterns, folders):
file_name = os.path.basename(file)
if pattern in file_name:
os.rename(file, os.path.join(folder, file_name))
推荐阅读
- react-native - 有什么办法可以将 TabBar 放在我的标题上
- mongodb - 如何避免集合中的重复条目?
- bash - 用 MAKEFLAGS 覆盖包含空格的 make 变量
- sql - 需要帮助从 sql 内部联接获取 SUM 数据
- python - 比较熊猫组中的不同行
- gradle - 在 gradle 中解压 rpm
- apache-spark - 从数据块中的 mlflow-registry 加载模型时出现 InvalidMountException
- python - 如何使用 Kivy/Buildozer 在 Android 上请求 ACCESS_SURFACE_FLINGER 权限?
- c# - c# 中 CefSharp DevTool 类中的事件处理程序
- powershell - 通过 PowerShell 创建新用户