首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >os.rename删除文件python 3

os.rename删除文件python 3
EN

Stack Overflow用户
提问于 2018-03-22 00:46:52
回答 1查看 3.5K关注 0票数 1

Python新手,我的简单脚本获得一个给定的目录并依次重命名所有文件,但是它正在删除这些文件,但是打印显示的是文件名被重命名,不知道它在哪里出错。

而且,它以什么顺序检索这些文件?

代码语言:javascript
复制
import os

path = os.path.abspath("D:\Desktop\gp")
i = 0
for file_name in os.listdir(path):

    try:
        print (file_name + " - " + str(i))
        os.rename(os.path.join(path,file_name), str(i))
    except WindowsError:
        os.remove(str(i))
        os.rename(os.path.join(path,file_name), str(i))

    i += 1

print(str(i) + " files.")

编辑

下面是使用工作代码的解决方案,通过创建日期检索dir中的所有文件,并在保留文件扩展名的同时为它们分配一个迭代编号。

代码语言:javascript
复制
import os

def sorted_dir(folder):
    def getctime(name):
        path = os.path.join(folder, name)
        return os.path.getctime(path)
    return sorted(os.listdir(path), key=getctime)

path = os.path.abspath("D:\Path\Here")
i = 0
for file_name in sorted_dir(path):
    _, ext = os.path.splitext(file_name)
    print (file_name + " - " + str(i)+ext)    
    os.rename(os.path.join(path,file_name), os.path.join(path, str(i) + ext))
i += 1

print(str(i-1) + " files.")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-22 01:02:19

问题是,您使用的是源的绝对路径,而对目标使用的是相对路径。所以这些文件不会被删除,它们只是被移动到当前的工作目录中。

要修复它,以便将它们重命名到它们已经位于的目录中,您可以在源上的目标上执行相同的操作:

代码语言:javascript
复制
os.rename(os.path.join(path,file_name), os.path.join(path, str(i)))

从评论中可以看出,您可能希望保留这些文件的扩展名。要做到这一点:

代码语言:javascript
复制
_, ext = os.path.splitext(file_name)
os.rename(os.path.join(path,file_name), os.path.join(path, str(i) + ext))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49418799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档