python - 如何根据文件名将一个文件夹中的多个文件分成不同的文件夹?
问题描述
当前的文件组织如下所示:
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
先感谢您!
解决方案
像这样使用带有bash的简单 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
当输出看起来适合您时,删除命令。
推荐阅读
- python - 状态 200 但我没有得到一些响应。蟒蛇请求
- c# - 消除 C# Excel Interop 中的一系列行
- angular - 浏览器中不显示数据 - 仅允许使用数组和可迭代对象
- excel - 将通过输入框选择的列设置为变量
- c++ - C++ - 显式和隐式命名空间实现差异
- java - 如何将 EPOC 时间转换为日期字符串(YYYY-MM-dd)?
- security - 将从 socket.io-client 导出的对象放在 window 对象上会不会是一种安全妥协?
- vba - 使用样式或编号列表来选择标题之间的内容
- python - 当父类不返回任何内容而子类不返回时,如何正确子类化一个类
- mysql - 无法启动 MySQL 服务器 - 控制进程退出并出现错误代码