根据文件名

时间:2017-09-13 05:53:55

标签: python file rename

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

  1. 22DEC16的 7603 520981127600_03.jpg
  2. 13NOV16的 2302 999230157801_07.jpg
  3. 08JAN14的 7603 811108236510_02.jpg
  4. 21OCT15的 2302 197661710099_07.jpg
  5. 07MAR17的 2302 551529900521_01.jpg
  6. 19FEB17的 3211 074174309177_09.jpg
  7. 19FEB17的 3211 881209232440_02.jpg
  8. 19FEB17的 2302 491000265198_04.jpg
  9. 我需要根据日期后的粗体数字将文件移动到两个文件夹中 - 因此包含2302和3211的文件将进入名为" panchromatic"的现有文件夹。和7603的文件将进入名为" sepia"的另一个文件夹。

    我尝试过其他问题的多个例子,但似乎没有人适合这个问题。我对Python很陌生,所以我不确定发布什么样的例子。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

没有给你解决方案,这就是我推荐的内容。

  1. 使用path = '/path/to/dir/' for file in os.listdir(path): ... 迭代目录中的文件。

    file[6:10]
  2. 通过切割字符串来检查4位数字。根据它的外观,您需要获得if int(file[6:10]) in {2302, 2311}

  3. 检查dst = /path/to/panchromatic。如果是,dst = /path/to/sepia/。否则,shutil.move

  4. 使用shutil.move(os.path.join(path, file), dst)移动文件。像os.path.join这样的地方,其中import os加入了路径人工制品。

  5. 请确保您在脚本顶部import shutilClass Menu { public Int64 ID { get; set; } [ForeignKey("ParentMenu")] public Int64? ParentID { get; set; } [ForeignKey("CombinedMenu")] public Int64? CombinedMenuID { get; set; } public virtual Menu ParentMenu { get; set; } public virtual Menu CombinedMenu { get; set; } }

答案 1 :(得分:0)

你可以通过简单的方式或艰难的方式来做到这一点。

简单方法

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

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)

当前形式的此解决方案容易被错误分类,因为我们正在寻找的数字可能偶然出现在字符串中。我会让你找到减轻这种情况的方法。

艰难的方式

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

答案 2 :(得分:0)

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