基于filenam隔离文件

2024-05-19 02:53:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  1. 2016年12月22日
  2. 2016年11月13日
  3. 2014年1月8日7603811108236510_02.jpg
  4. 2015年10月21日2302197661710099_07.jpg
  5. 2017年3月7日2302551529900521_01.jpg
  6. 2017年2月19日
  7. 2017年2月19日3211881209232440_02.jpg
  8. 2017年2月19日2302491000265198_04.jpg

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

我试过其他问题的多个例子,但似乎没有一个适合这个问题。我对Python非常陌生,所以我不确定要发布什么示例。任何帮助都将不胜感激。在


Tags: 文件图像目录文件夹示例文件名数字例子
3条回答

自我解释,使用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))

在不给你解决方案的情况下,我建议你这样做。在

  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。{/Else}

  4. 使用shutil.move移动文件。类似于shutil.move(os.path.join(path, file), dst),其中{}连接路径人工制品。

  5. 确保import os和{}位于脚本顶部。

你可以用简单的方法,也可以用难的方法。在

简单的方法

测试文件名是否包含要查找的子字符串。在

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)

当前形式的这个解决方案很容易被错误分类,因为我们要查找的数字可能会偶然出现在字符串中。我会让你去想办法缓解这种情况。在

艰难的道路

正则表达式。将日期后的四个字母数字与正则表达式匹配。留给你去探索!在

相关问题 更多 >

    热门问题