【问题标题】:how to rename random number from file name to sequent number?如何将随机数从文件名重命名为连续数?
【发布时间】:2022-11-30 07:24:46
【问题描述】:

您好,我正在尝试将目录中的文件从 (2015_001.txt、2015_005.txt、2015_009.txt..etc) 重命名为 (2015_001.txt、2015_002.txt、2015_003.tx..etc)。我是 python 的新手,有人可以帮助我吗?

我尝试使用循环,但所有文件都不再串联 这是我到目前为止尝试过的代码

import re
import os
_src = "C:/ZTD/pwv2015/"
_ext = ".txt"
endsWithNumber = re.compile(r'(\d+)'+(re.escape(_ext))+'$')
for filename in os.listdir(_src):
    m = endsWithNumber.search(filename)
    if m:
        os.rename(filename, _src+'2015_' + str(m.group(1)).zfill(3)+_ext)
    else:
        os.rename(filename, _src+'2015_' + str(0).zfill(3)+_ext)

【问题讨论】:

  • 这些名称的关系是什么?在进行重命名之前,您想按升序对名称进行排序吗?

标签: python directory file-rename


【解决方案1】:

您可能更容易使用 glob 模块来查找文件和 f-strings 以进行重命名。尝试这个:

import glob
import os
import pathlib

src = pathlib.Path("C:/ZTD/pwv2015")
pattern = src / "2015_[0-9][0-9][0-9].txt"
inpaths = sorted(glob.glob(str(pattern))
for outnum, inpath in enumerate(inpaths, 1):
    outpath = src / f"2015_{outnum:03d}.txt"
    if outpath != pathlib.Path(inpath):
        os.rename(inpath, outpath)

请注意,由于输入和输出目录相同,我们必须小心覆盖文件。然而,在这个例子中,我们“压缩”了范围,所以如果我们按排序顺序进行,输入文件编号将始终大于或等于输出文件编号,所以我们没问题。

此外,当您测试它时,请将 os.rename 替换为 print,以确保万无一失 ;-)

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2023-03-10
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多