【问题标题】:Variable name is not defined变量名未定义
【发布时间】:2017-11-07 23:25:42
【问题描述】:

所以基本上我试图遍历我的子目录和文件(图像),这样每个子目录都包含两个图像,一个以单词 first 开头,一个以单词 @ 开头987654322@.

我想做的是,在每个子目录中,我想将以first开头的图像分配给变量img1,以second开头的图像分配给img2

这是我得到的:

path = '/my_path/'

for root, dirs, files in os.walk(path):
    for file in files:
        if file.startswith('first'):
            img1 = numpy.asarray(Image.open(root + '/' + file))
        if file.startswith('second'):
            img2 = numpy.asarray(Image.open(root + '/' + file))

    print 'Image 1 is:'
    print img1
    print 'Image 2 is:'
    print img2

但是,当我运行上述代码时,我得到以下信息:

Image 1 is:
Traceback (most recent call last):
  File "test.py", line 17, in <module>
    print img1
NameError: name 'img1' is not defined

我做错了什么?

谢谢。

【问题讨论】:

  • 如果没有以first开头的文件名怎么办?
  • 我确保每个子目录中唯一的文件名以“first”或“second”开头。
  • 您的文件是否以“first”或“second”开头,还是两种类型都可以?
  • 也许所有的子目录都有一个first 文件,但是你开始搜索的目录呢?
  • @Reti43 是的,我可以同时拥有两种类型

标签: python image numpy python-imaging-library pillow


【解决方案1】:
#Your code
if file.startswith('first'):
        img1 = numpy.asarray(Image.open(root + '/' + file))

你有你的代码,所以你只定义img1 如果满足该条件。如果不满足(即没有文件以 'first' 开头),img1 将不会被定义。因此,当您尝试打印 img1 时,python 不知道您在说什么。

【讨论】:

  • 在您解释问题时,提出解决方案也可能会有所帮助。例如,img1 = np.asarray(...) if file.startswith('first') else None
【解决方案2】:

您正在使用“/my_path/”调用您的函数。然后将“/”添加到 == '/my_path/' 的根目录中,即为“/my_path//filename”。

将根路径加入文件名的更好方法是使用:

img1 = numpy.asarray(Image.open(os.path.join(root,file))

这将避免任何混淆的双斜杠或正斜杠与反斜杠。此外,正如其他人指出的那样,如果您肯定要在代码中使用变量,那么它应该在条件语句之外定义,否则它可能永远不会被定义。

【讨论】:

  • 我认为这是您提到的主要问题“如果您肯定要在代码中使用变量,那么它应该在条件语句之外定义,否则它可能永远不会被定义”。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多