[英]Segregate files based on filename
我有一个包含多个图像的目录,我需要根据文件名的一部分将它们分成两个文件夹。 这是文件名的示例:
我需要根据日期后以粗体显示的数字将文件移动到两个文件夹中-因此包含2302和3211的文件将进入一个名为“全色”的现有文件夹,而包含7603的文件将进入另一个名为“ sepia”的文件夹。
我从其他问题中尝试了多个示例,但似乎没有一个适合这个问题。 我是Python的新手,所以不确定要发布哪个示例。 任何帮助将不胜感激。
在没有给您解决方案的情况下,这就是我的建议。
使用os.listdir
遍历目录中的文件。
path = '/path/to/dir/' for file in os.listdir(path): ...
通过对字符串进行切片来检查4位数字。 从外观上看,您需要获取file[6:10]
检查if int(file[6:10]) in {2302, 2311}
。 如果是,则dst = /path/to/panchromatic
。 否则, dst = /path/to/sepia/
使用shutil.move
移动文件。 诸如shutil.move(os.path.join(path, file), dst)
,其中os.path.join
连接路径伪像。
确保在脚本顶部import os
并import shutil
。
您可以通过简单或困难的方式进行操作。
测试文件名是否包含要查找的子字符串。
import os
import shutil
files = os.listdir('.')
for f in files:
# skip non-jpeg files
if not f.endswith('.jpg'):
continue
# move if panchromatic
if '2302' in f or '3211' in f:
shutil.move(f, os.path.join('panchromatic', f))
# move if sepia
elif '7603' in f:
shutil.move(f, os.path.join('sepia', f))
# notify if something else
else:
print('Could not categorize file with name %s' % f)
当前形式的此解决方案易于分类错误,因为我们正在寻找的数字可能会在字符串的后面偶然出现。 我将让您找到减轻这种情况的方法。
常用表达。 将日期后的四个字母数字与正则表达式匹配。 留给您探索!
使用Python 3或Python 2 + backport pathlib
自我说明:
import pathlib
import shutil
# Directory paths. Tailor this to your files layout
# see https://docs.python.org/3/library/pathlib.html#module-pathlib
source_dir = pathlib.Path('.')
sepia_dir = source_dir / 'sepia'
panchro_dir = source_dir / 'panchromatic'
assert sepia_dir.is_dir()
assert panchro_dir.is_dir()
destinations = {
('2302', '3211'): panchro_dir,
('7603',): sepia_dir
}
for filename in source_dir.glob('*.jpg'):
marker = str(filename)[7:11]
for key, value in destinations.items():
if marker in key:
filepath = source_dir / filename
shutil.move(str(filepath), str(value))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.