Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以通过用户输入批量重命名文件夹中的文件?_Python_Python 3.x_Rename_File Rename - Fatal编程技术网

Python 有没有一种方法可以通过用户输入批量重命名文件夹中的文件?

Python 有没有一种方法可以通过用户输入批量重命名文件夹中的文件?,python,python-3.x,rename,file-rename,Python,Python 3.x,Rename,File Rename,希望用户输入重命名批处理照片文件,但结尾后缀更改 每隔两个月,我都会得到同样的工作,重新命名数百张照片。我花了好几个小时,甚至好几天。到目前为止,我有代码询问测试类型(照片正在拍摄)、测试数量、测试从用户输入到用户输入的深度 但我遇到了一个障碍,我想能够批量重命名,但不同的照片显示不同的深度。因此,例如,我希望照片是名称: BH01_0-5m 然后下一张照片将被命名。 BH01_5-10m 但我只知道如何编码,所以所有东西都被命名为BH01_0-5m 这是到目前为止我为用户输入的代码: bore

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

每隔两个月,我都会得到同样的工作,重新命名数百张照片。我花了好几个小时,甚至好几天。到目前为止,我有代码询问测试类型(照片正在拍摄)、测试数量、测试从用户输入到用户输入的深度

但我遇到了一个障碍,我想能够批量重命名,但不同的照片显示不同的深度。因此,例如,我希望照片是名称: 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等)顺序排列。

我在这里做一些假设:

  • 文件夹的名称是钻孔的名称
  • 每个钻孔的文件名可能不同,但按字母数字排序时,第一个将是最接近地表的文件名
  • 所有设置都需要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
语句前面的注释符号,它将实际重命名文件。

您的代码显示第一张照片的名称是如何建立的。但是原始文件的名称是什么?输入文件夹中将包含多少组照片?也许如果你提供更多关于输入的信息,你可以得到一些如何解决问题的技巧。每个文件夹中会有3-6张照片,每个项目有52个文件夹。照片的原始名称是手机和相机为其设置的随机日期名称+1表示可靠答案。如果你想,你可以考虑使用<代码> OS或<代码>子进程< /代码>自动重命名文件,调用shell,例如运行<代码> OS系统('Re'+文件+''+NexNoNe] < /Calp> @ 101ARROZZ),我更喜欢使用SUTULL MODE给出的解决方案,由于这将使用任何适合其运行的操作系统的命令,而不是在当前系统上依赖名为
ren
的命令-但是如果它可用,那么对于这么小的文件集,效果可能类似。我甚至没有看到该部分被注释掉,oops。很不错的!我假设Windows是因为公司环境。非常感谢。是的,您的假设是100%正确的。@E.Jayne请随意接受答案以结束问题(如果您觉得答案不完整,请询问更多详细信息)