2015-10-22 98 views
1

我正在尝试使脚本来重命名文件夹中的所有文件,这是我有的代码,但它不起作用。我在该文件夹中有200个图像,我想将filename1_更改为filename1,以此类推所有文件。这种转变对狗狗来说是狗狗1;或者其他什么,文件的新名称可以是任何东西。有人能帮我吗? 我还是新来的python,所以我现在的代码可能看起来像什么都没有。python更改文件夹中的多个文件的文件名

import os 
    directoryname="C:\\Users\\Ineke\\Documents\\Python Scripts\\images" 
    lijstmetfiles = os.listdir(directoryname) 
    for i in range(len(lijstmetfiles)): 
     os.rename(str(lijstmetfiles[i]), str("doggy"+str(i)) 
+0

如果你张贴明显的例子这将是有益的输入名称和预期的输出名称。 – wflynny

+0

那么你现在的代码实际上做了什么*?! – jonrsharpe

+1

另外:'对于范围内的我(len(LIST))'是[* code smell *](https://en.wikipedia.org/wiki/Code_smell)或[*反模式*](https:/ /en.wikipedia.org/wiki/Anti-pattern)。它通常可以用'for i in LIST'取代。 –

回答

2

我跑你的代码,有以下两个主要问题:

第一个是,你是不是在你的os.rename线关闭您的支架。

你有这样的:

os.rename(str(lijstmetfiles[i]), str("doggy"+str(i)) 

你缺少一个括号,所以应该是:

os.rename(str(lijstmetfiles[i]), str("doggy"+str(i))) 

然而,这可能是一个编辑的问题,从您的帖子在复制你的代码。

其次,最重要的是,你没有指定你要重命名的路径,你只是给出两个文件名,所以你最有可能得到一个文件未找到错误。

您需要利用使用您的目录和文件名,Python的os.path.join方法如下面的代码样本:

os.rename(
    os.path.join(directoryname, str(lijstmetfiles[i])), 
    os.path.join(directoryname, str("doggy"+str(i))) 
    ) 

所以,现在你明确指定的完整路径是什么,你的重命名。

另一个要点是,你不需要为你的文件名转换为“str”。例如,即使您的文件名为5,从listdir获取文件列表仍然会以字符串形式返回。

最后,把他们放在一起,你的代码应该是这个样子:

import os 
directoryname="C:\\Users\\Ineke\\Documents\\Python Scripts\\images" 
lijstmetfiles = os.listdir(directoryname) 
print(lijstmetfiles) 
for i in range(len(lijstmetfiles)): 
    os.rename(
     os.path.join(directoryname, lijstmetfiles[i]), 
     os.path.join(directoryname, "doggy"+str(i)) 
     ) 

我测试了我的结束,它应该工作。

这是关于os模块的文档。看看它获得与文件系统玩的时候什么是提供给您进一步的理解:

的Python 2:https://docs.python.org/2/library/os.html

的Python 3:https://docs.python.org/3/library/os.html

1

以下代码将重命名该目录中具有相似名称但排除_的所有文件。

#UNTESTED 
import os 
directoryname="C:\\Users\\Ineke\\Documents\\Python Scripts\\images" 
lijstmetfiles = os.listdir(directoryname) 
for i in lijstmetfiles: 
    os.rename(os.path.join(directoryname, i), 
       os.path.join(directoryname, 
          i.replace('_',''))) 
相关问题