Python 用于在一组文件夹中使用部分名称搜索文件并将它们排序到新文件夹结构中的脚本
Python script to search for a file using partial name in a set of folders and sort them into a new folder structure
我第一次尝试 python 自动化脚本。我在特定文件夹结构中有一组文件
source1
-date1
-date1_time1_xyz.csv
-date1_time3_abc.doc
-date2
-date2_time1_xyz.csv
-date2_time3_abc.doc
source2
-date1
-date1_time1_dfg.csv
-date1_time2_abc.doc
-date2
-date2_time1_xyz.csv
-date2_time3_abc.doc
但我想要一个文件夹结构,将所有日期的所有 .csv 组合到一个名为 meta 的文件夹中,将所有日期的 .doc 组合到另一个名为 docs 的文件夹中,如下所示:
date1
-meta
-date1_time1_xyz.csv
-date1_time1_dfg.csv
-docs
-date2_time3_abc.doc
-date2_time2_abc.doc
我写了一个脚本来将这些视频分类到我需要的文件夹结构中!所以我想我会分享我的解决方案(也许它可能对某人有帮助)。欢迎所有改进意见!
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 20 09:57:51 2021
Example usage:
#specify source folder
ogpath = '/home/data
(data should contain folders source1, source2, so on..)
#specify destination folder
new_path = '/home/tester/new'
#specify which recording to aggregate
filename = "date1_time1"
"""
import os, shutil
from pathlib import Path
import glob
#specify source folder
ogpath = '/home/data'
#specify destination folder
new_path = '/home/tester/new'
#specify which files to aggregate
filename = "date1_time1"
#create new folder for sorted data
dst_dirpath = os.path.join(new_path,'sorted_data')
print(dst_dirpath)
if not os.path.isdir(dst_dirpath):
os.mkdir(dst_dirpath)
#create new path for each date
record_path = os.path.join(dst_dirpath, filename[:4]) #take only date1 to create the folder
if not os.path.isdir(record_path):
os.mkdir(record_path)
#create sub path for meta
meta_path = os.path.join(record_path,'meta')
if not os.path.isdir(meta_path):
os.mkdir(meta_path)
#create sub path for docs
docs_path = os.path.join(record_path,'docs')
if not os.path.isdir(docs_path):
os.mkdir(docs_path)
#search for files with same name in all folders
for file in glob.glob(ogpath+'/**/'+filename[:4]+'/*'+filename+'*.doc'):
shutil.copy(file, docs_path)
for file in glob.glob(ogpath+'/**/**/*'+filename+'*.csv'):
shutil.copy(file, meta_path)
我第一次尝试 python 自动化脚本。我在特定文件夹结构中有一组文件
source1
-date1
-date1_time1_xyz.csv
-date1_time3_abc.doc
-date2
-date2_time1_xyz.csv
-date2_time3_abc.doc
source2
-date1
-date1_time1_dfg.csv
-date1_time2_abc.doc
-date2
-date2_time1_xyz.csv
-date2_time3_abc.doc
但我想要一个文件夹结构,将所有日期的所有 .csv 组合到一个名为 meta 的文件夹中,将所有日期的 .doc 组合到另一个名为 docs 的文件夹中,如下所示:
date1
-meta
-date1_time1_xyz.csv
-date1_time1_dfg.csv
-docs
-date2_time3_abc.doc
-date2_time2_abc.doc
我写了一个脚本来将这些视频分类到我需要的文件夹结构中!所以我想我会分享我的解决方案(也许它可能对某人有帮助)。欢迎所有改进意见!
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 20 09:57:51 2021
Example usage:
#specify source folder
ogpath = '/home/data
(data should contain folders source1, source2, so on..)
#specify destination folder
new_path = '/home/tester/new'
#specify which recording to aggregate
filename = "date1_time1"
"""
import os, shutil
from pathlib import Path
import glob
#specify source folder
ogpath = '/home/data'
#specify destination folder
new_path = '/home/tester/new'
#specify which files to aggregate
filename = "date1_time1"
#create new folder for sorted data
dst_dirpath = os.path.join(new_path,'sorted_data')
print(dst_dirpath)
if not os.path.isdir(dst_dirpath):
os.mkdir(dst_dirpath)
#create new path for each date
record_path = os.path.join(dst_dirpath, filename[:4]) #take only date1 to create the folder
if not os.path.isdir(record_path):
os.mkdir(record_path)
#create sub path for meta
meta_path = os.path.join(record_path,'meta')
if not os.path.isdir(meta_path):
os.mkdir(meta_path)
#create sub path for docs
docs_path = os.path.join(record_path,'docs')
if not os.path.isdir(docs_path):
os.mkdir(docs_path)
#search for files with same name in all folders
for file in glob.glob(ogpath+'/**/'+filename[:4]+'/*'+filename+'*.doc'):
shutil.copy(file, docs_path)
for file in glob.glob(ogpath+'/**/**/*'+filename+'*.csv'):
shutil.copy(file, meta_path)