python - 在 Python 中操作目录的最简单方法?
问题描述
我想要一个程序来帮助清理一堆文件的标题和结构,以便它们的格式适合我的媒体中心程序。我写了一个程序来清理父文件夹的名称,因为我想要“名称(年份)”。我在清理子文件时遇到了麻烦。这是我拥有的基本伪代码:
Find all folders in given directory
Open each folder and copy or move files in child folders to main folder
Sort files by size
Rename the largest file the same name as the parent directory
Search for .srt files
if no .srt files delete all but largest file
if one .srt file found rename it same name as parent directory + .eng.srt
if multiple .srt files found search for "english" or "eng"
if one matching file found rename it same name as parent directory + .eng.srt
if multiple english or eng files found pick one without "SDH" and rename as above
Delete all files except renamed largest file and renamed .srt if found
我使用 os.rename() 重命名父目录,但管理子文件让我感到困惑。os.walk 似乎被推荐,但它一点也不直观。如果有这样的事情,我如何将目录作为对象管理?
解决方案
假设,文件的重命名等于标记它以保留它(您的伪代码需要稍作更改):
from os import listdir, remove
from os.path import isfile, join
mainpath = "/tmp/"
renamed_files = []
每次重命名文件时,将其添加到“待保存列表”中:
renamed_files.append(fname)
到底:
onlyfiles = [f for f in listdir(mainpath) if isfile(join(mainpath, f))]
for fname in onlyfiles:
if mainpath+fname not in renamed_files:
remove(mainpath+fname) # os.remove()
推荐阅读
- html - 悬停更改 div 上的 CSS
- c++ - 带有附加类复制构造函数的菱形继承
- php - 一对多关系不起作用
- c++ - 访问`std::vector`的保留但未调整大小的内存作为原始内存是否安全?
- wpf - 调整大小时出现 dataGrid 的最后一列 [lastColumn-1]
- c# - 为什么要列出
, 字典 和其他集合包含一个名为“版本”的字段? - azure - 仅允许在 Azure API Manager 中进行单个后端调用
- postgresql - Postgresql - 在字符变化列上获取最大数值
- android - 监听 ViewAnimator 的动画结束事件
- ruby-on-rails - Rails 5 在重新加载时停止自定义 http 中间件。