【问题标题】:How to rename all files names in folder based on another file name folder?如何根据另一个文件名文件夹重命名文件夹中的所有文件名?
【发布时间】:2020-11-24 10:58:54
【问题描述】:

我在 2 个文件夹中有 1000 多个文件。 我想根据第二个文件夹文件名重命名第一个文件夹中的所有文件?

我的测试脚本

import os

for file in os.listdir("/home/folder1"):
    os.rename(file, f"/home/folder2")

【问题讨论】:

  • 你想如何在文件夹之间匹配文件?
  • 文件夹中的文件数量相同。所以我只需要循环它们并一个一个重命名
  • 您不关心第二个文件夹中以前的文件名吗?
  • 没错,只需要我从第一个文件夹中获得的新文件
  • 扩展怎么样?

标签: python


【解决方案1】:

你可以使用pathlib:

from pathlib import Path

src = Path(r"/home/folder1")
dst = Path(r"/home/folder2")
for s, d in zip(src.iterdir(), dst.iterdir()):
    d.rename(d.with_stem(s.stem))
    # for python lower than 3.9 use next line
    # d.rename(d.with_name(s.with_suffix(d.suffix).name))

附: Path.with_stem() 已在 python 3.9 中添加,因此我添加了低版本的实现。

【讨论】:

  • 嘿,我发现其中有错误。重命名文件中的信息后是随机的。不像原来的那样一一对应。如何解决这个问题?
  • @alexuuu,对不起,我不太明白你的意思
【解决方案2】:

我建议使用os.walk() 而不是os.listdir()

os.walk() 返回一个包含所有子文件夹、文件和父目录的生成器对象。所以只要指定根文件夹就可以了。

import os

result = list(os.walk())

for parent, directories, files in result:
    if parent == "folder_name_1":
        for file in files:
            os.rename(parent + '/' + file, parent + '/' + "new_name_of_the_file")

这是一个模糊的答案,您可能希望您的重命名逻辑根据您的需要而有所不同。

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 2011-07-14
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多