4

当前的文件组织如下所示:

Species_name1.asc
Species_name1.csv
Species_name1_Averages.csv
...
...
Species_name2.asc
Species_name2.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 模块中的工具。但是,确切的脚本正在逃避我,我的文件仍然杂乱无章。如果您有任何建议可以帮助我完成这个小任务,我将不胜感激。

此目录中还有许多文件类型和后缀,但 (species_name?) 部分始终是一致的。

以下是预期的层次结构:

Species_name1
-- Species_name1.asc
-- Species_name1.csv
-- Species_name1_Averages.csv
Species_name2
-- Species_name2.asc
-- Species_name2.csv
-- Species_name2_Averages.csv

先感谢您!

4

2 回答 2

6

的简单 shell 工具:

find . -type f -name '*Species_name*' -exec bash -c '
    dir=$(grep -oP "Species_name\d+" <<< "$1")
    echo mkdir "$dir"
    echo mv "$1" "$dir"
' -- {} \; 

echo 当输出看起来适合您时,删除命令。

于 2020-07-01T21:44:48.680 回答
0

假设您的所有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}')
于 2020-07-01T21:47:26.257 回答