如何将文件从当前路径移动到与要移动的文件名称相似或相似的特定文件夹?

Drp*_* RD 18 python directory directory-structure

我的文件夹结构如下所示:

- 95000
- 95002
- 95009
- AR_95000.pdf
- AR_95002.pdf
- AR_95009.pdf
- BS_95000.pdf
- BS_95002.pdf
- BS_95009.pdf
Run Code Online (Sandbox Code Playgroud)

[注95000、95002、95009是文件夹]


我的目标是将文件AR_95000.pdf和移动BS_95000.pdf到名为 的文件夹95000,然后AR_95002.pdf移动BS_95002.pdf到名为 的文件夹95002,依此类推。

PDF是系统生成的报告,因此我无法控制命名。

Tom*_*koo 42

使用pathlib这个任务变得超级简单:

from pathlib import Path

root = Path("/path/to/your/root/dir")

for file in root.glob("*.pdf"):
    folder_name = file.stem.rpartition("_")[-1]
    file.rename(root / folder_name / file.name)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,pathlib相对于os/ shutil(在本例中)的一个主要优点是接口Path对象直接提供给os类似函数。这样,实际的复制 ( rename()) 就直接作为实例方法完成。


参考:

  • @DrpRD如果您熟悉 [`split`](https://docs.python.org/3/library/stdtypes.html#str.split) 方法,那么 [`​​rsplit`](https://docs .python.org/3/library/stdtypes.html#str.rsplit) 基本上做同样的事情,但是一旦你给它额外的 `maxsplit` 参数 - 分割是从右边开始计算的。这样,因为我们只想要 `_` 之后的最后一部分(假设 `AB_CD_9500` 也是一个选项),所以我们只从右侧分割一次 - `rsplit('_', 1)`。这将返回 `['AR', '95000']` 并通过使用 `[-1]` 进行索引,我们获取最后一个元素 (`95000`) (3认同)