【问题标题】:Python move files from current path to specific folder named like or similar to the file being movedPython将文件从当前路径移动到与被移动文件类似或相似的特定文件夹
【发布时间】:2020-12-08 19:22:09
【问题描述】:

我的文件夹结构如下:

  1. 文件夹 95000
  2. 文件夹 95002
  3. 文件夹 95009
  4. AR_95000.pdf
  5. AR_95002.pdf
  6. AR_95009.pdf
  7. BS_95000.pdf
  8. BS_95002.pdf
  9. BS_95009.pdf

[注意文件夹名为 95000、95002 等,文件夹名称中没有实际的“文件夹”一词,此处仅出于表示目的而提及。]


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

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

【问题讨论】:

标签: python directory directory-structure shutil


【解决方案1】:

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

from pathlib import Path

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

for file in root.glob("*.pdf"):
    folder_name = file.stem.rsplit("_", 1)[-1]
    file.rename(root / folder_name / file.name)

如您所见,pathlib 相对于os/shutil(在这种情况下)的一个主要优势是接口Path 对象直接提供给os 类函数。这样实际的复制 (rename()) 直接作为实例方法完成。


参考资料:

【讨论】:

  • 这就像你提到的那样工作,它的速度很快,所有文件都在各自的文件夹中移动。我一直在摆弄shutil,但无济于事,并且不断出现错误……说过,如果您有时间,您可以提及上面的代码是如何工作的。我觉得你用下划线[_]分割文件,然后是代码的下一部分file.stem.rsplit("_", 1)[-1]
  • @DrpRD 如果你熟悉split 方法,那么rsplit 基本上是一样的,但是一旦你给它额外的maxsplit 参数 - 拆分从右边开始计算。这样,因为我们只想要_ 之后的最后一部分(假设AB_CD_9500 也是一个选项)我们只从右边拆分一次 - rsplit('_', 1)。这将返回 ['AR', '95000'] 并通过使用 [-1] 进行索引,我们获取最后一个元素 (95000)
  • 谢谢队友!,完美的解释......我想我现在明白了,在这方面为我节省了很多时间。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
相关资源
最近更新 更多