用于重命名目录中文件的Python代码无效

用于重命名目录中文件的Python代码无效,python,Python,我希望不时以数字顺序重命名我的文件,例如,1.png、2.png、3.png等等 我写这段代码就是为了这样做,我只是以打印文件的名称来结束它,以确保它是正确的: import os os.chdir('/Users/hasso/Pictures/Digital Art/saved images for vid/1') for f in os.listdir(): f_name=1 f_ext= '.png' print('{}{}'.format(f_name,

我希望不时以数字顺序重命名我的文件,例如,1.png、2.png、3.png等等

我写这段代码就是为了这样做,我只是以打印文件的名称来结束它,以确保它是正确的:

import os

os.chdir('/Users/hasso/Pictures/Digital Art/saved images for vid/1')

for f in os.listdir():

    f_name=1
    f_ext= '.png'

    print('{}{}'.format(f_name, f_ext))

我该怎么解决这个问题呢

我不知道为什么您需要使用
os.chdir()
来更改目录,而您可以直接将路径传递到
os.listdir()
。要重命名文件,可以使用。您还需要增加文件名的计数器,因为您的当前代码在每次迭代中保持
fname
等于
1
。您需要将计数器保持在循环外,并在循环内递增它。这是您可以使用的地方,因为您可以使用索引

基本版本:

from os import listdir
from os import rename

from os.path import join

path = "path_to_images"

for i, f in enumerate(listdir(path), start=1):
    rename(join(path, f), join(path, str(i) + '.png'))
from os import listdir
from os import rename

from os.path import join
from os.path import exists

path = "path_to_images"

extension = '.png'

fname = 1
for f in listdir(path):
    if f.endswith(extension):
        while exists(join(path, str(fname) + extension)):
            fname += 1
        rename(join(path, f), join(path, str(fname) + extension))
        fname += 1
您可以使用获取完整路径,因为
os.listdir()
不包括文件的完整路径。上面的代码也不是很健壮,因为它重命名了所有文件,并且不处理重命名已经存在的
.png
文件

高级版本:

from os import listdir
from os import rename

from os.path import join

path = "path_to_images"

for i, f in enumerate(listdir(path), start=1):
    rename(join(path, f), join(path, str(i) + '.png'))
from os import listdir
from os import rename

from os.path import join
from os.path import exists

path = "path_to_images"

extension = '.png'

fname = 1
for f in listdir(path):
    if f.endswith(extension):
        while exists(join(path, str(fname) + extension)):
            fname += 1
        rename(join(path, f), join(path, str(fname) + extension))
        fname += 1

它用于检查文件是否已经存在。

我不确定为什么需要使用
os.chdir()
来更改目录,而您可以直接将路径传递到
os.listdir()
。要重命名文件,可以使用。您还需要增加文件名的计数器,因为您的当前代码在每次迭代中保持
fname
等于
1
。您需要将计数器保持在循环外,并在循环内递增它。这是您可以使用的地方,因为您可以使用索引

基本版本:

from os import listdir
from os import rename

from os.path import join

path = "path_to_images"

for i, f in enumerate(listdir(path), start=1):
    rename(join(path, f), join(path, str(i) + '.png'))
from os import listdir
from os import rename

from os.path import join
from os.path import exists

path = "path_to_images"

extension = '.png'

fname = 1
for f in listdir(path):
    if f.endswith(extension):
        while exists(join(path, str(fname) + extension)):
            fname += 1
        rename(join(path, f), join(path, str(fname) + extension))
        fname += 1
您可以使用获取完整路径,因为
os.listdir()
不包括文件的完整路径。上面的代码也不是很健壮,因为它重命名了所有文件,并且不处理重命名已经存在的
.png
文件

高级版本:

from os import listdir
from os import rename

from os.path import join

path = "path_to_images"

for i, f in enumerate(listdir(path), start=1):
    rename(join(path, f), join(path, str(i) + '.png'))
from os import listdir
from os import rename

from os.path import join
from os.path import exists

path = "path_to_images"

extension = '.png'

fname = 1
for f in listdir(path):
    if f.endswith(extension):
        while exists(join(path, str(fname) + extension)):
            fname += 1
        rename(join(path, f), join(path, str(fname) + extension))
        fname += 1

它用于检查文件是否已存在。

您不断获得
1.png
建议作为新名称,因为您总是在循环中设置
f_name=1
。在循环之前使用
1
初始化它,然后在重命名每个文件时增加它

还有几点:

  • 您不需要
    os.chdir
    ,因为即使默认值是
    ——当前目录,您也可以向提供目标路径
  • 在处理
    用户
    主目录时,如果不必硬编码,那就很好了。为您检索此值
  • 在迭代可能要更改的列表时,最好只列出要更改的项目。因此,与其在所有文件上循环并更改其中一些文件,不如先收集所有要更改的项目,这样做会更容易。在您的情况下,只列出
    .png
    文件,然后循环此列表
  • (相当高级)如果尝试重命名为现有名称,将抛出错误。下面我要做的是检查下一个要使用的名称是否已在列表中,如果已在列表中,请增加
    f_name
    编号

  • 您不断得到
    1.png
    建议作为新名称,因为您总是在循环中设置
    f_name=1
    。在循环之前使用
    1
    初始化它,然后在重命名每个文件时增加它

    还有几点:

  • 您不需要
    os.chdir
    ,因为即使默认值是
    ——当前目录,您也可以向提供目标路径
  • 在处理
    用户
    主目录时,如果不必硬编码,那就很好了。为您检索此值
  • 在迭代可能要更改的列表时,最好只列出要更改的项目。因此,与其在所有文件上循环并更改其中一些文件,不如先收集所有要更改的项目,这样做会更容易。在您的情况下,只列出
    .png
    文件,然后循环此列表
  • (相当高级)如果尝试重命名为现有名称,将抛出错误。下面我要做的是检查下一个要使用的名称是否已在列表中,如果已在列表中,请增加
    f_name
    编号

  • 我看不到重命名文件的代码,我是不是遗漏了什么?您可以使用os重命名它。如果需要,请重命名。您忘记了在循环中增加
    fname
    。@usr2564301这样做我该怎么做?我太迷路了,以至于。。。将是
    f_name+=1
    。也许你应该从更简单的开始。如果你对索引做
    ,在enumerate(os.listdir())中的f:
    你甚至不必为增量而烦恼。使用
    index+1
    (索引是基于0的)我没有看到重命名文件的代码,我缺少什么吗?您可以使用os重命名它。如果需要,请重命名。您忘记了在循环中增加
    fname
    。@usr2564301这样做我该怎么做?我太迷路了,以至于。。。将是
    f_name+=1
    。也许你应该从更简单的开始。如果你对索引做
    ,在enumerate(os.listdir())中的f:
    你甚至不必为增量而烦恼。使用
    index+1
    (索引以0为基础)@usr2564301是的,我正在编辑我的答案以包括
    os.path.join()
    。谢谢。@usr2564301是的,我正在编辑我的答案以包括
    os.path.join()
    。谢谢,谢谢!我真诚地感谢你的帮助!非常感谢。我真诚地感谢你的帮助!