字符串格式中的多变量问题

时间:2019-07-16 17:26:40

标签: python-3.x

我在名为t_000.pngt_001.pngt_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

3 个答案:

答案 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是否以目录分隔符(即平台的“ /”)结尾,都可以使用。

还要注意dirfile在Python中都是保留名称,您可能想重命名变量。 还要检查一下,如果file是NumPy数组,则file[i] = im可能无法正常工作。