是否有更优雅的解决方案来修改这些文件名?

Is there a more elegant solution to modify these file names?

我在文件名的“末尾”有一个索引,希望能够通过函数更改它。我在示例参数中包含了三种不同的构建文件的方法。这最终使处理不同情况变得混乱。

我就是这样完成的。它有效,但看起来非常混乱。还有比这更好的方法吗?更优雅但不牺牲速度的东西?

import os

def change_index(file, index):
    string_splits = os.path.basename(file).split("_")
    new_string_splits = '_'.join(string_splits[:3]), '_'.join(string_splits[3:])
    newer_string_splits = new_string_splits[1].split(".")
    newest_string_splits = '.'.join(newer_string_splits[:1]), '.'.join(newer_string_splits[1:])
    final_string = new_string_splits[0] + "_" + str(index) + "." + newest_string_splits[1]
    print("before path", file)
    print("after path ", os.path.join(os.path.dirname(file), final_string))

change_index("/Users/Name/Documents/untitled folder 3/Photos_Friends_20201201_0.jpg", 3)
change_index("/Users/Name/Documents/untitled folder 3/Photos_Friends_20191111_0.example_photo.jpg", 12)
change_index("/Users/Name/Documents/untitled folder 3/Photos_Friends_20210604_0.example_photo.jpg.something.expl", 2)

输出:

before path /Users/Name/Documents/untitled folder 3/Photos_Friends_20201201_0.jpg
after path  /Users/Name/Documents/untitled folder 3/Photos_Friends_20201201_3.jpg
before path /Users/Name/Documents/untitled folder 3/Photos_Friends_20191111_0.example_photo.jpg
after path  /Users/Name/Documents/untitled folder 3/Photos_Friends_20191111_12.example_photo.jpg
before path /Users/Name/Documents/untitled folder 3/Photos_Friends_20210604_0.example_photo.jpg.something.expl
after path  /Users/Name/Documents/untitled folder 3/Photos_Friends_20210604_2.example_photo.jpg.something.expl

由于总是有一个 8 位数的日期,因此您可以使用正则表达式

import re

def change_index(file, index):
    return re.sub(r"(\d{8})_\d", r"_" + str(index), file)

更具体

  • 如果要替换的数字总是zero

    def change_index(file, index):
        return re.sub(r"(\d{8})_0", r"_" + str(index), file)
    
  • 日期部分稍微更严格的正则表达式

    def change_index(file, index):
        return re.sub(r"([12][0-2]\d\d[0-1]\d[0-3]\d)_0", r"_" + str(index), file)