我有一个包含多个图像的目录,我需要根据文件名的一部分将它们分成两个文件夹。这是文件名的示例:
我需要根据日期后的粗体数字将文件移动到两个文件夹中 - 因此包含2302和3211的文件将进入名为" panchromatic"的现有文件夹。和7603的文件将进入名为" sepia"的另一个文件夹。
我尝试过其他问题的多个例子,但似乎没有人适合这个问题。我对Python很陌生,所以我不确定发布什么样的例子。任何帮助将不胜感激。
答案 0 :(得分:0)
没有给你解决方案,这就是我推荐的内容。
使用path = '/path/to/dir/'
for file in os.listdir(path):
...
迭代目录中的文件。
file[6:10]
通过切割字符串来检查4位数字。根据它的外观,您需要获得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
和Class 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))