python如何把排序好的图(1.jpg,2.jpg...)倒序重命名

python如何把排序好的图(1.jpg,2.jpg...)倒序重命名

问题描述:

比如一个文件夹下有(1.jpg,2.jpg...999.jpg)然后把999.jpg改为1.jpg,从大到小重命名为1.jpg,2.jpg...999.jpg

或者改良下这个代码改为重命名图片时,识别名称按从大到小读取然后排序也可,感谢大佬前来帮助小白。

import os
path=input('请输入文件路径(结尾加上/):')       


#获取该目录下所有文件,存入列表中
f=os.listdir(path)


n=0
for i in f:
    
    #设置旧文件名(就是路径+文件名)
    oldname=path+f[n]
    
    #设置新文件名
    newname=path+str(n+1)+'.jpg'
    
    #用os模块中的rename方法对文件改名
    os.rename(oldname,newname)
    print(oldname,'======>',newname)
    
    n+=1
 

思路 : 这个主要是 os.listdir(path) 获取到的图片列表名字是按照字符串的形式进行排序的, 而字符串的排序是按照 sacii 码表对应的整形进行排序的, 所以顺序不怎么整齐, 你可以将图片名字切分出来转换成整形来排序就很好的解决了, 我的示例代码中有切分和排序的方法, 你可以看看

改成f后就变成FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\17331\\Downloads\\google downloads\\新建文件夹\\hoshi/1.jpg' -> 'C:\\Users\\17331\\Downloads\\google downloads\\新建文件夹\\hoshi/260.jpg'

import os

path = input('请输入文件路径(结尾加上/):')

# 获取该目录下所有文件,存入列表中
files = os.listdir(path)

files.sort(key=lambda x: int(x[:-4]))  # 按文件名升序排序
n = len(files)
for i in range(n):
    oldname = path + files[i]
    newname = path + 'temp_'+files[n - i - 1]
    os.rename(oldname, newname)
    
for name in os.listdir(path):
    os.rename(path+name, path+name.split('temp_')[1])

import os
path=input('请输入文件路径(结尾加上/):')       


#获取该目录下所有文件,存入列表中
files = os.listdir(path)

files.sort(key = lambda x: int(x[:-4])) # 按文件名升序排序
n = len(files)
for i in range(n):
    
    #设置旧文件名(就是路径+文件名)
    oldname = path + f[i]
    
    #设置新文件名
    newname = path + f[n - i - 1]
    
    #用os模块中的rename方法对文件改名
    os.rename(oldname,newname)
    print(oldname,'======>',newname)
    

大佬,我试了下NameError: name 'f' is not defined

 

import os

user_path = input("请输入文件夹路径>>").strip()

num_list = []  # 定义空列表后面用
file_list = os.listdir(user_path)  # 获得 jpg 列表(排序方式是字符串的排序,不整齐)

for file_name in file_list:
    num = int(file_name.split(".")[0])  # 切分名字和后缀
    num_list.append(num)     # 将名字转换成整形加入空列表
sort_num = sorted(num_list)  # 进行排序(现在是整形升序排序)

nums=999
for i in sort_num:
    os.rename(os.path.join(user_path,f"{i}.jpg"),os.path.join(user_path,f"{nums}.jpg"))
    nums -= 1
print("修改完成!")