【问题标题】:Is there a way I can batch rename files in a folder with user input?有没有办法可以通过用户输入批量重命名文件夹中的文件?
【发布时间】:2019-09-25 17:35:27
【问题描述】:

希望用户输入重命名批处理照片文件,但更改结尾后缀。

每隔几个月,我就会得到相同的工作,重命名数百张照片。如果不是几天的话,我需要几个小时才能完成。到目前为止,我有代码询问测试类型(照片正在捕捉)、测试数量、测试从用户输入到用户输入的深度。

但我遇到了一个障碍,我希望能够批量重命名,但不同的照片显示不同的深度。因此,例如,我希望照片是名称: BH01_0-5m 然后命名下一张照片。 BH01_5-10m

但我只知道如何编码,所以所有东西都被命名为 BH01_0-5m

这是我目前用于用户输入的代码:

borehole = raw_input("What type of geotechnical investigation?")
type(borehole)

number = raw_input("What number is this test?")
type(number)

frommetre = raw_input("From what depth (in metres)?")
type(frommetre)

tometre = raw_input("What is the bottom depth(in metres)?")
type(tometre)

name = (borehole+number+"_"+frommetre+"-"+tometre)
print(name)

我得到了我想要的第一个照片文件的标题,但如果我在每个文件夹中有 4 张照片,它们现在将被重命名为与用户输入完全相同的内容。我希望以 5 米为单位(0-5、5-10、10-15、15-20、20-25 等)使后缀连续。

【问题讨论】:

  • 您的代码显示了第一张照片的名称是如何建立的。但是原始文件的名称是什么?输入文件夹中有多少组照片?也许如果您提供有关输入的更多信息,您可以获得一些关于如何解决问题的提示。
  • 每个文件夹中有 3-6 张照片,每个项目有 52 个文件夹。照片的原始名称是手机和相机为它们设置的随机日期名称

标签: python python-3.x rename file-rename


【解决方案1】:

我在这里做了一些假设:

  • 文件夹的名字就是钻孔的名字
  • 每个钻孔的文件名可能不同,但按字母数字排序时,第一个将是最接近地表的文件名
  • 所有组都需要增加 5 米

您要执行的操作可以在两个嵌套循环中完成:

  • 对于所有文件夹:
  • 对于每个文件夹中的所有文件:
  • 重命名文件以按顺序匹配文件夹名称和一些深度

这是一个例子:

from pathlib import Path
from shutil import move

root_folder = 'c:\\temp'
for folder in Path(root_folder).iterdir():
    if folder.is_dir():
        startDepth = 0
        step = 5
        for file in Path(folder).iterdir():
            if file.is_file():
                new_name = f'{folder.name}_{str(startDepth).zfill(3)}-{str(startDepth + step).zfill(3)}{file.suffix}'
                print(f'would rename {str(file)} to {str(file.parent / Path(new_name))}')
                # move(str(file), str(file.parent / Path(new_name)))
                startDepth += step

请注意,我还在每个深度中添加了.zfill(3),因为我认为您会更喜欢BH01_000-005.jpg 之类的名称而不是BH01_0-5.jpg,因为它们会更好地排序。

请注意,此脚本只打印它会执行的操作,您可以简单地注释掉 print 语句并删除 move 语句前面的注释符号,它实际上会重命名文件。

【讨论】:

  • +1 以获得可靠的答案。如果您愿意,可以考虑使用ossubprocess 自动重命名文件以调用shell,例如,运行os.system('ren '+file+' '+new_name)
  • @101arrowz 我更喜欢给出的解决方案,使用 shutil.move,因为这将使用适合其运行的操作系统的任何内容,而不是依赖于名为 ren 的命令当前系统 - 但如果它可用,对于这么小的文件集,它的效果可能相似。
  • 我什至没有看到那部分被注释掉了,哎呀。很不错!我假设 Windows 是因为企业环境。
  • 非常感谢。是的,你的假设是 100% 正确的。
  • @E.Jayne 随时接受答案以关闭问题(如果您觉得答案不完整,请询问更多详细信息)
猜你喜欢
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 2020-01-28
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
相关资源
最近更新 更多