我现在按顺序保存图像1 ... 10 我的第一个代码如下。
name=[]
fullname=[]
for i in range(1,11):
name.insert(i,i)
fullname=os.path.join(save_path,str(name[i]+".png")
img.save(fullname[i])
但在此代码中,图像文件仅保存为“9.png”。
所以我改变了方式。
{{1}}
现在,有一个indexerror:list index超出范围。
我需要帮助。请。
答案 0 :(得分:0)
Python是零索引的。您的插入确实位于列表的末尾,但由于1, 2, 3
位于0, 1, 2
位置,因此您无法正确检索它们。最快的解决方法是以不同的方式定义name
- 而不是空列表:
name = [None] # Or any other arbitrary value
这样,索引0处的某些内容永远不会被使用,但是允许您在索引1处插入1,然后在2处插入2,依此类推。
这可能会在您的代码中显示另一个错误。您在fullname=os.path.join(save_path,str(name[i]+".png")
行上错过了一个右括号,这可能只是将其复制错误。确保括号在name[i]
之后,如下所示:
fullname = os.path.join(save_path, str(name[i]) + ".png")
编辑:由于您的代码确实在运行,因此该括号必须位于某处。请编辑您的问题以告诉我们它的位置。
答案 1 :(得分:0)
第一种方式的问题可能是因为最后一行没有完全标记:
f(1)
但是第二种方式的问题是,当列表中没有任何内容时,您尝试在索引f(x-1)
处插入内容。要解决此问题,请执行以下操作:
save_path='/home/imagefolder'
for i in range(1,11):
name=i
fullname=os.path.join(save_path,str(name)+".png")
或者使用1
等内容初始化name=[]
fullname=[]
for i in range(10):
name.insert(i,i+1)
fullname=os.path.join(save_path,str(name[i]+".png")
img.save(fullname[i])
。
答案 2 :(得分:0)
您可以在字符串中添加数字(从1到10),如下例所示:
方法1:
name=[]
string="img"
for i,j in enumerate(range(10),1):
name.append(string+str(i))
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']
方法2:
name=[]
string="img"
n=1
for i in range(10):
name.append(string+str(n))
n += 1
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']
方法3:
name=[]
string="img"
n=1
for i in range(10):
name.insert(n,string+str(n))
n +=1
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']
方法4:
name=[]
string="img"
for i,j in enumerate(range(10),1):
name.insert(i,string+str(i))
print(name)
# Output -> ['img1', 'img2', 'img3', 'img4', 'img5', 'img6', 'img7', 'img8', 'img9', 'img10']
在你的第一个代码中:你写道:
save_path='/home/imagefolder'
for i in range(1,11):
name=i
fullname=os.path.join(save_path,str(name)+".png")
但这不是正确的输入:尝试编写如下代码。
save_path='/home/imagefolder'
fullname = []
n=1
for i in range(10):
fullname.append(os.path.join(save_path,str(n)+".png"))
n += 1
print(fullname)
# ['/home/imagefolder\\1.png', '/home/imagefolder\\2.png', '/home/imagefolder\\3.png', '/home/imagefolder\\4.png', '/home/imagefolder\\5.png', '/home/imagefolder\\6.png', '/home/imagefolder\\7.png', '/home/imagefolder\\8.png', '/home/imagefolder\\9.png', '/home/imagefolder\\10.png']
#or use the below one.
save_path='/home/imagefolder'
fullname = []
for i,j in enumerate(range(10),1):
fullname.append(os.path.join(save_path,str(i)+".png"))
print(fullname)
# ['/home/imagefolder\\1.png', '/home/imagefolder\\2.png', '/home/imagefolder\\3.png', '/home/imagefolder\\4.png', '/home/imagefolder\\5.png', '/home/imagefolder\\6.png', '/home/imagefolder\\7.png', '/home/imagefolder\\8.png', '/home/imagefolder\\9.png', '/home/imagefolder\\10.png']
答案 3 :(得分:0)
您收到KeyError
因为list
为空,当index
为空时您无法分配给特定list
。要解决此问题,您可以使用list
值初始化None
,然后在looping
时替换它们:
name = [None] * 11 # initialize the list with None values
并在循环中使用:
name[i] = i
例如:
name= [None] * 11
fullname=[None] * 11
for i in range(1,11):
name[i-1] = i
fullname[i-1] = os.path.join(save_path,str(name[i-1])+".png")
img.save(fullname[i-1])
虽然,你必须从索引0开始,所以name[i-1] = i
更好。或者您可以使用name.append(i)
,因为它将以与for循环相同的顺序附加。