繁体   English   中英

根据文件名分隔文件

[英]Segregate files based on filename

我有一个包含多个图像的目录,我需要根据文件名的一部分将它们分成两个文件夹。 这是文件名的示例:

  1. 16DEC16 7603 520981127600_03.jpg
  2. 13NOV16 2302 999230157801_07.jpg
  3. 08JAN14 7603 811108236510_02.jpg
  4. 21OCT15 2302 197661710099_07.jpg
  5. 2017年3月7日2302 551529900521_01.jpg
  6. 19FEB17 3211 074174309177_09.jpg
  7. 19FEB17 3211 881209232440_02.jpg
  8. 19FEB17 2302 491000265198_04.jpg

我需要根据日期后以粗体显示的数字将文件移动到两个文件夹中-因此包含2302和3211的文件将进入一个名为“全色”的现有文件夹,而包含7603的文件将进入另一个名为“ sepia”的文件夹。

我从其他问题中尝试了多个示例,但似乎没有一个适合这个问题。 我是Python的新手,所以不确定要发布哪个示例。 任何帮助将不胜感激。

在没有给您解决方案的情况下,这就是我的建议。

  1. 使用os.listdir遍历目录中的文件。

     path = '/path/to/dir/' for file in os.listdir(path): ... 
  2. 通过对字符串进行切片来检查4位数字。 从外观上看,您需要获取file[6:10]

  3. 检查if int(file[6:10]) in {2302, 2311} 如果是,则dst = /path/to/panchromatic 否则, dst = /path/to/sepia/

  4. 使用shutil.move移动文件。 诸如shutil.move(os.path.join(path, file), dst) ,其中os.path.join连接路径伪像。

  5. 确保在脚本顶部import osimport 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM