codeislong
2021-02-08 20:22
采纳率: 90%
浏览 130

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
 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • 给你骨质唱疏松 2021-02-09 12:28
    已采纳

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

    点赞 打赏 评论
  • codeislong 2021-02-09 09:57

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

    点赞 1 打赏 评论
  • 我不喜欢这个世界 2021-02-09 12:13
    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])
    点赞 1 打赏 评论
  • PythonJavaC++go 2021-02-09 09:30
    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)
        
    点赞 打赏 评论
  • codeislong 2021-02-09 09:55

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

    点赞 打赏 评论
  • 给你骨质唱疏松 2021-02-09 12:22

     

    点赞 打赏 评论
  • 给你骨质唱疏松 2021-02-09 12:22
    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("修改完成!")
    点赞 打赏 评论

相关推荐 更多相似问题