我在名为t_000.png
,t_001.png
,t_002.png
等的文件夹中有几个文件。
我做了一个for循环,以使用字符串格式导入它们。但是当我使用for循环时,我得到了错误
No such file or directory: '/file/t_0.png'
这是我使用的代码,我认为我应该使用多个%s,但我不知道如何使用。
for i in range(file.shape[0]):
im = Image.open(dir + 't_%s.png' % str(i))
file[i] = im
答案 0 :(得分:2)
您需要在字符串前加上零。对于您当前使用的格式类型,这应该可以:
im = Image.open(dir + 't_%03d.png' % i)
其中格式字符串%03s
的意思是“该字符串应具有3个字符的长度,并且空格应由前导零填充”。
您还可以使用python的其他(较新的)字符串格式语法,这种语法更加简洁:
im = Image.open(f"{dir}t_{i:03d}")
答案 1 :(得分:2)
您没有用数字填充数字,因此得到t_0.png
而不是t_000.png
。
在Python 3中推荐的方法是通过str.format
函数:
for i in range(file.shape[0]):
im = Image.open(dir + 't_{:03d}.png'.format(i))
file[i] = im
您可以在the documentation中看到更多示例。
如果您使用的是Python 3.6或更高版本,也可以选择Formatted string literals,请参见Green Cloak Guy的答案。
答案 2 :(得分:1)
尝试一下:
import os
for i in range(file.shape[0]):
im = Image.open(os.path.join(dir, f't_{i:03d}.png'))
file[i] = im
(对于3.6之前的Python版本,将f't_{i:03d}.png'
更改为't_{:03d}.png'.format(i)
或't_%03d.png' % i
。
诀窍是指定一定数量的前导零,请查看official docs了解更多信息。
此外,您应该用更健壮的os.path.join(dir, file)
替换'dir + file',无论dir
是否以目录分隔符(即平台的“ /”)结尾,都可以使用。
还要注意dir
和file
在Python中都是保留名称,您可能想重命名变量。
还要检查一下,如果file
是NumPy数组,则file[i] = im
可能无法正常工作。