【发布时间】:2020-07-12 16:54:07
【问题描述】:
我有一个包含 12500 张图片的文件夹。文件名包含数字,所以看起来像:
0.jpg
1.jpg
2.jpg
3.jpg
.
.
.12499.jpg
现在我想移动文件。范围为 0-7999 的文件应复制到第一个文件夹。文件 8000-9999 应复制到第二个文件夹,范围为 10000-12499 的文件应复制到第三个文件夹。
首先,我认为我可以轻松地将 [0-7999].jpg 用于第一个文件夹,将 [8000-9999].jpg 用于第二个文件夹,将 [10000-12499].jpg 用于第三个文件夹。但是,这不起作用。我根据我知道的通配符找出了以下代码?和 *: 以下代码确实有效并且完成了工作(请注意,我注释掉了 shutil.copy,而是使用 print 来检查结果):
import glob
import shutil
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/?.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/??.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/???.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/[1-7]???.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder2/"
for file in glob.glob('/tmp/source/[8-9]???.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder3/"
for file in glob.glob('/tmp/source/?????.jpg'):
#shutil.copy(file, dest_dir)
print(file)
但是,我想为此提供一个优雅的解决方案。我用整数范围搜索了正则表达式并尝试了以下方法:
dest_dir = "/tmp/folder3/"
for file in glob.glob('/tmp/source/\b([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|1000).jpg'):
#shutil.copy(file, dest_dir)
print(file)
这不起作用。那么正确的实现是怎样的呢?我需要一个解决方案,shutil.copy 和 shutil.move,但我认为两者都是一样的。 我需要在这里有一个正则表达式解决方案,因为我希望这只是解决这个问题的一行代码。如果一个人只知道正确的表达式。我不想通过提取数字/值本身来迭代它,就像在这个solution(或任何其他避免找到正确正则表达式的解决方案)中一样。所以我的问题真的是关于正则表达式。
【问题讨论】:
-
你不能在全局中使用正则表达式。