在Python中重命名文件:没有这样的文件或目录

4
如果我尝试重命名目录中的文件,出现错误。 我认为问题可能是我没有以正确的格式插入目录? 其他信息: python 2和Linux机器 错误信息:OSError:[Errno 2]没有那个文件或目录 虽然它可以正常打印目录内容。我做错了什么?
import os

for i in os.listdir("/home/fanna/Videos/strange"):
    #print str(i)
    os.rename(i, i[:-17])

可能是重复的问题:Python: OSError: [Errno 2] No such file or directory: '' - Christian Dean
1
你是否在正确的目录下?也就是说,你的Python工作目录是否为/home/fanna/Videos/strange。如果不是,请将其与文件名连接起来。 - Mohammad Athar
3个回答

10

os.rename() 需要传入想要重命名的文件的完整路径。而 os.listdir 只返回目录中的文件名。请尝试以下代码:

import os
baseDir = "/home/fanna/Videos/strange/"
for i in os.listdir( baseDir ):
    os.rename( baseDir + i, baseDir + i[:-17] )

这解决了我的问题!!没意识到它也没有包括路径! - Fanna1119
很高兴它能够运行。我已经编辑了答案,使os.listdir返回更明确。并且记住,你可以使用左边的绿色勾号接受对你最有用的答案。 - CDspace

3

我有点晚了,但原因是因为os.listdir仅列出该目录中的项,但工作目录仍然是Python脚本所在的位置。

因此,要解决此问题,请添加:

os.chdir(your_directory_here)

仅在for循环之前,其中your_directory_here是您用于os.listdir的目录。


3
假设有一个文件/home/fanna/Videos/strange/name_of_some_video_file.avi,并且你正在/home/fanna目录下运行脚本。变量iname_of_some_video_file.avi(文件的名称,不包括完整路径)。因此,当你运行以下命令时:
os.rename(i, i[:-17])

you're saying

os.rename("name_of_some_video_file.avi", "name_of_some_video_file.avi"[:-17])

Python并不知道这些文件来自/home/fanna/Videos/strange。它会将它们与当前工作目录解析,因此它正在寻找/home/fanna/name_of_some_video_file.avi


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接