![](/img/trans.png)
[英]How do I copy files from one directory with sub-folders to another directory with sub-folders based on folder name?
[英]How can I separate many files from one folder into separate folders based on the name of the files?
当前的文件组织如下所示:
物种名称1.asc
物种名称1.csv
Species_name1_Averages.csv
...
...
物种名称2.asc
物种名称2.csv
Species_name2_Averages.csv
我需要找出一个脚本,它可以使用名称(Species_name1、Species_name2...等)创建新目录,并且可以将文件从基本目录移动到适当的新目录中。
import os
import glob
import shutil
base_directory = [CURRENT_WORKING_DIRECTORY]
with open("folder_names.txt", "r") as new_folders:
for i in new_folders:
os.mkdirs(base_directory+i)
以上是我在基本目录中创建新目录时可以想到的一个示例。
我知道如果我要使用 python,我将不得不使用 os、shutil 和/或 glob 模块中的工具。 但是,确切的脚本是 escaping 我,我的文件仍然没有组织。 如果您有任何建议可以帮助我完成这个小任务,我将不胜感激。
此目录中还有许多文件类型和后缀,但 (species_name?) 部分始终是一致的。
以下是预期的层次结构:
物种名称1
-- 物种名称1.asc
-- 物种名称1.csv
-- Species_name1_Averages.csv
物种名称2
-- 物种名称2.asc
-- 物种名称2.csv
-- Species_name2_Averages.csv
先感谢您!
像这样使用简单的 shell 工具和bash :
find . -type f -name '*Species_name*' -exec bash -c '
dir=$(grep -oP "Species_name\d+" <<< "$1")
echo mkdir "$dir"
echo mv "$1" "$dir"
' -- {} \;
当 output 看起来适合您时,放弃echo
命令。
假设你所有的asc
文件都像你的例子一样命名:
from os import mkdir
from shutil import move
from glob import glob
fs = []
for file in glob("*.asc"):
f = file.split('.')[0]
fs.append(f)
mkdir(f)
for f in fs:
for file in glob("*.*"):
if file.startswith(f):
move(file, f'.\\{f}\\{file}')
更新:
假设您的所有Species_name.asc
文件都像您的示例一样标记:
from os import mkdir
from shutil import move
from glob import glob
fs = [file.split('.')[0] for file in glob("Species_name*.asc")]
for f in fs:
mkdir(f)
for file in glob("*.*"):
if file.startswith(f):
move(file, f'.\\{f}\\{file}')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.