IndexError尝试在后缀前将名称附加到文件名的末尾

  • 本文关键字:文件名 后缀 IndexError python
  • 更新时间 :
  • 英文 :


使用Python 3.8.3,我试图在文件名的末尾添加一个字符串,以便在组合成一个大目录时唯一标识它们。在本例中,我试图在文件名的末尾,但在后缀。

之前添加一个简单的_a。例如,我所有的文件(工作目录包含JPG和TXT文件)需要从文件名为P025525_002.jpgP025525_002_a.jpg,对于TXT文件也是如此。

但是,我得到以下错误:

Traceback (most recent call last):
  File "add_name.py", line 12, in <module>
    new_name = '{1} {2} {3}'.format(f_name + str('_a'), f_ext)
IndexError: Replacement index 2 out of range for positional args tuple

这是我写的脚本:

import os
os.chdir('E:\Users\rest_of\file_path')
def increment():
    global COUNT
    COUNT = COUNT + 1
for f in os.listdir(os.getcwd()):
    f_name, f_ext = os.path.splitext(f)
    new_name = '{1} {2} {3}'.format(f_name + str('_a'), f_ext)
    os.rename(f, new_name)

new_name更改为:

new_name = f'{f_name}_a{f_ext}'

您的.format()的问题是您指定了三个占位符,但您传递了2个值。还要注意,您应该从0开始计数,而不是从1开始计数,3超出了范围:

new_name = '{0}_a{1}'.format(f_name, f_ext).

顺便说一句,在你的情况下,你可以跳过数字,直接使用{}

我推荐f-string

改变这一行-

for f in os.listdir(os.getcwd()):
    f_name, f_ext = os.path.splitext(f)
    new_name = '{1} {2} {3}'.format(f_name + str('_a'), f_ext)
    os.rename(f, new_name)

-

for f in os.listdir(os.getcwd()):
    f_name, f_ext = os.path.splitext(f)
    new_name = '{0} {1}'.format(f_name + str('_a'), f_ext)
    os.rename(f, new_name)

或者使用f-strings哪个更容易读-

new_name = f'{f_name}_a{f_ext}'

这对我有用!

for f in os.listdir(os.getcwd()):
    f_name, f_ext = os.path.splitext(f)
    new_name = '{2} {3}'.format(f_name + str('_a'), f_ext)
    os.rename(f, new_name)

+用于两个字符串之间的字符串连接。所以这些字符串实际上组合成一个字符串。理论上,有2个参数,但是你要传递3个参数。这就是问题所在

最新更新