我有不同的目录,其中包含给定格式的.avi
文件:
2021-03-06
---17 15 33.avi
17 16 33.avi
17 17 33.avi
2021-03-07
---19 43 57.avi
19 44 57.avi
19 45 57.avi
Retrieval
用户将指定要从中复制文件的目录名、开始文件名和结束文件名作为参数。例如:
python copy.py -f "2021-03-07" -s "19 43 57" -e "19 44 57"
运行此操作后,应在检索内部创建一个新的子目录,该子目录将与开始文件名相同,其中应复制.avi
文件
预期结果:
2021-03-06
---17 15 33.avi
17 16 33.avi
17 17 33.avi
2021-03-07
---19 43 57.avi
19 44 57.avi
19 45 57.avi
Retrieval
---19 43 57
---19 43 57.avi
19 44 57.avi
[注意:仅复制起始和结束文件名内的视频,包括给定的文件名]
这是迄今为止我能够编写的脚本:
import os
import shutil
import glob
import argparse
from pprint import pprint
ap = argparse.ArgumentParser()
ap.add_argument("-d","--startTime", type=str, required=True,
help="Start time of video")
ap.add_argument("-r","--endTime", type=str, required=True,
help="End time of video")
ap.add_argument("-f","--folder", type=str, required=True,
help="Folder name for which videos are to be merged")
args = ap.parse_args()
source='drive://'+args.folder+'//'
dest='drive://Retrieval//'+args.startTime+'//'
files = []
for dirname, dirnames, filenames in os.walk(source):
# print path to all subdirectories first.
for subdirname in dirnames:
files.append(os.path.join(dirname, subdirname))
# print path to all filenames.
for filename in filenames:
files.append(os.path.join(dirname, filename))
pprint(files)
if os.path.exists(dest):
print("this folder exit in this dir")
else:
dir = os.mkdir(dest)
for f in files:
shutil.copy(f,dest)
print("done")
上述代码的问题在于它将所有文件从源文件夹复制到目标文件夹
要对文件执行模式搜索,可以使用^{} 。在上面的示例中,对于所有具有文件路径的操作,我都使用了^{} ,其中^{} 提供了
pathlib
和glob
之间的接口所以,要从文件夹中检索所有需要的文件,我们可以使用下一个模式:
[0-9][0-9] [0-9][0-9] [0-9][0-9].avi
。它将匹配所有.avi
文件,其中名称将包含3个由空格分隔的2位数字您的文件名包含时间,我建议您使用^{} 或^{} 将startTime/endTime参数和文件名转换为相应的时间结构,我们将更容易进行比较
此外,我还在代码中添加了一些基本数据验证和消息,以下是最终结果:
相关问题 更多 >
编程相关推荐