使用Python 3.8.3,我试图在文件名的末尾添加一个字符串,以便在组合成一个大目录时唯一标识它们。在本例中,我试图在文件名的末尾,但在后缀。
之前添加一个简单的_a
。例如,我所有的文件(工作目录包含JPG和TXT文件)需要从文件名为P025525_002.jpg
到P025525_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个参数。这就是问题所在