【问题标题】:Python: Move a directory based on namePython:根据名称移动目录
【发布时间】:2021-08-23 21:38:18
【问题描述】:

在目录“A”中,我有几个目录名称为“abc_123”、“abc_124”等等。同样在目录“A”中,我有名为“anc_123”、“anc_124”等的目录。以及其中的其他几个目录。

我的问题是如何将仅以“abc_***”开头的目录移动到不同的位置。我是 python 新手,不知道如何继续这个。任何帮助表示赞赏。

【问题讨论】:

  • 在 bash 中:mv abc_* new_location/
  • 我正在尝试编写一个python程序,上面的答案是否也适用
  • 最简单的解决方案是避免使用 Python 并使用专为移动文件而设计的命令行工具。如果您坚持在 Python 中执行此操作,则需要使用 os 模块中的函数,至少可能是 listdirrename
  • 如果你想使用shell路由,python擅长执行shell命令;请参阅stackoverflow.com/q/89228/1275942 了解多种方法。也就是说,在 python 中也可以这样做——如果你习惯的话,python 对文件操作的支持也差不多。这还具有更便携的好处——如果你在 Windows 上运行你的代码,bash 可能是不确定的,但 python 的库希望仍然可以工作。

标签: python directory


【解决方案1】:

shutilmove(src, dst) method 将移动一个目录。

os.listdir(dir) 可以列出一个目录中的所有文件和目录。然后,您可以简单地进行字符串比较以测试目录是否以 abc 开头。

但是,glob 可能是最佳选择。 glob.glob("directory/abc_*") 将返回以abc 开头的directory 的所有文件/目录的列表。

您还需要检查文件是文件还是目录,os.path.isdir 对此很有用。

import glob
import os
import os.path
import shutil

files = glob.glob("abc_*") # will return a list, like ["abc_123", "abc_345"]
for file in files:
    if os.path.isdir(file):
        shutil.move(file, "dest/")

【讨论】:

  • 当我尝试上面的代码时,它在 files=glob.glob("abc.*") 步骤中给了我空列表
  • @apilat 我正在尝试在 python 程序中实现这个功能
  • _,不是.,假设您的文件是abc_123。阅读 glob 文档页面上的示例,了解有关如何自定义 glob 的更多信息
  • pymotw.com/2/glob好像也有例子
  • 这是一个错字,但是当我尝试打印(文件)时,我得到了空列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多