使用Python重命名目录中的多个文件

时间:2016-05-26 17:33:23

标签: python directory rename

我正在尝试使用此Python脚本重命名目录中的多个文件:

import os
path = '/Users/myName/Desktop/directory'
files = os.listdir(path)
i = 1

for file in files:
    os.rename(file, str(i)+'.jpg')
    i = i+1

当我运行此脚本时,出现以下错误:

Traceback (most recent call last):
  File "rename.py", line 7, in <module>
    os.rename(file, str(i)+'.jpg')
OSError: [Errno 2] No such file or directory

为什么?我该如何解决这个问题?

感谢。

8 个答案:

答案 0 :(得分:48)

重命名时你没有给出完整的路径,这样做:

hasPunctuation = astring like "*[!A-Za-z0-9/]*"

编辑:感谢tavo,第一个解决方案是将文件移动到当前目录,修复了该文件。

答案 1 :(得分:4)

您必须先将此路径设为当前工作目录。 很简单。 其余的代码没有错误。

使其成为当前的工作目录:

os.chdir(path)

答案 2 :(得分:3)

import os
from os import path
import shutil

Source_Path = 'E:\Binayak\deep_learning\Datasets\Class_2'
Destination = 'E:\Binayak\deep_learning\Datasets\Class_2_Dest'
#dst_folder = os.mkdir(Destination)


def main():
    for count, filename in enumerate(os.listdir(Source_Path)):
        dst =  "Class_2_" + str(count) + ".jpg"

        # rename all the files
        os.rename(os.path.join(Source_Path, filename),  os.path.join(Destination, dst))


# Driver Code
if __name__ == '__main__':
    main()

答案 3 :(得分:2)

根据@ daniel的评论,os.listdir()只返回文件名而不是文件的完整路径。使用os.path.join(path,file)获取完整路径并重命名。

import os
path = 'C:\\Users\\Admin\\Desktop\\Jayesh'
files = os.listdir(path)
for file in files:
   os.rename(os.path.join(path, file), os.path.join(path, 'xyz_' + file + '.csv'))

答案 4 :(得分:0)

如果文件以随机方式重命名,则必须首先对目录中的文件进行排序。给定的代码首先进行排序,然后重命名文件。

import os
import re
path = 'target_folder_directory'
files = os.listdir(path)
files.sort(key=lambda var:[int(x) if x.isdigit() else x for x in re.findall(r'[^0-9]|[0-9]+', var)])
for i, file in enumerate(files):
    os.rename(path + file, path + "{}".format(i)+".jpg")

答案 5 :(得分:0)

只需使用接受的答案定义路径变量并列出:

path = "/Your/path/to/folder/"
files = os.listdir(path)

然后遍历该列表:

for index, file in enumerate(files):
    #print (file)
    os.rename(path+file, path +'file_' + str(index)+ '.jpg')

或以与Python列表推导相同的一行循环进行:

[os.rename(path+file, path +'jog_' + str(index)+ '.jpg')  for index, file in enumerate(files)]

我认为第一个更具可读性,在第二个中,循环的第一部分只是列表理解的第二部分

答案 6 :(得分:0)

我编写了一个快速灵活的文件重命名脚本,如果您想要一个无需重新发明轮子的可行解决方案。

它通过传递 replacement functions 来重命名当前目录中的文件。

每个函数指定您要对所有匹配文件名进行的更改。代码将确定将要进行的更改,并使用颜色显示它将产生的差异,并要求确认执行更改。

您可以在这里找到源代码,并将其放在您要重命名文件的文件夹中https://gist.github.com/aljgom/81e8e4ca9584b481523271b8725448b8

它在pycharm中有效,我没有在其他控制台上测试过

定义一些替换函数后,交互看起来像这样 enter image description here

当它运行第一个时,它会显示与目录中匹配的文件的所有差异,您可以确认是否进行替换,如下所示 enter image description here

答案 7 :(得分:-1)

我编写了一个快速灵活的脚本,负责显示差异,要求确认和重命名。如果需要有效的解决方案,则可以复制此脚本并将其放在要重命名文件的文件夹中。 https://gist.github.com/aljgom/81e8e4ca9584b481523271b8725448b8

它通过传递“重命名功能”来重命名当前目录中的文件,每个功能都可以进行更改。然后确定每个功能将进行的更改并使用颜色显示差异,并要求确认以执行更改。可在pycharm上使用,尚未在其他控制台上对其进行测试