【问题标题】:Conditional file loading and labeling python条件文件加载和标记python
【发布时间】:2020-04-08 16:33:39
【问题描述】:

我正在尝试创建一个从目录加载某些图像的函数。条件是,如果图像名称包含某个数字,则应将其作为对象加载(带有名称和数字)。

这是我到目前为止所做的:

get_image_data([71,72,82,105...])
directory = os.listdir("/Users/Me/Desktop/path2images/")


#Sample of files
0070_pressure_pred.png 
0070_pressure_target.png 
0070_velX_pred.png 
0070_velX_target.png 
0070_velY_pred.png 
0070_velY_target.png 
0071_pressure_pred.png 
0071_pressure_target.png 
0071_velX_pred.png 
0071_velX_target.png 
0071_velY_pred.png 
0071_velY_target.png 
0072_pressure_pred.png 
0072_pressure_target.png 
0072_velX_pred.png 

功能:

def get_pressure_prediction(file_numbers):
#takes  a list of image number and returns them 
for files in directory:
    for x in file_numbers:
        if str(x) in files[:4]:
            print("File '{}' matched".format(files))  #Code functions fine until here
            if str(pressure_pred) in files:
                "pp{}".format(x) = mpimg.imread(path + files) #attempting to load image and label it with pp{image number}
            elif str(pressure_target) in files:
                "pt{}".format(x) = mpimg.imread(path + files)
            elif str(velX_pred) in files:
                "vxp{}".format(x) = mpimg.imread(path + files)
            elif str(velX_target) in files:
                "vxt{}".format(x) = mpimg.imread(path + files)
            elif str(velY_pred) in files:
                "vyp{}".format(x) = mpimg.imread(path + files)
            elif str(velY_target) in files:
                "vyt{}".format(x) = mpimg.imread(path + files)   
            break

我收到此错误消息:

    "vyt{}".format(x) = mpimg.imread(path + files)
^
SyntaxError: can't assign to function call

【问题讨论】:

  • "vyt{}".format(x) 这是一个格式化的字符串。你为什么要给它分配一些东西?
  • @Axe319 我想给 mpimg.imread(path + files) 一个标签 vyt(x)。结果应该是运行 get_image_data([71,72,82,105]) 应该给出 vyt71,vyt72,vyt82,vyt105。我不知道有任何其他方法可以为 vyt 和所有其他格式化字符串分配不同的数字。

标签: python python-3.x if-statement format-string


【解决方案1】:

您不能有条件地标记变量。

"pp{}".format(x) 是字符串,变量名不能是字符串。例如 "foo" = 0 会给你一个语法错误。

这是另一个不起作用的例子:

for i in range(5):
    "variable{i}" = i

我建议创建一个类来存储图像的名称和路径,然后将图像附加到列表中,然后您可以对列表中的图像执行任何操作。示例:

class Image:
    def __init__(self, label, filePath):
        self.label = label
        self.image = mpimg.imread(filePath)

images = []  

if str(x) in files[:4]:
    print("File '{}' matched".format(files))  
    if str(pressure_pred) in files:
        images.append(Image("pp{}".format(x), path + files)) 
    elif str(pressure_target) in files:
        images.append(Image("pt{}".format(x), path + files))
    elif str(velX_pred) in files:
        images.append(Image("vxp{}".format(x), path + files))
    elif str(velX_target) in files:
        images.append(Image("vxt{}".format(x), path + files))
    elif str(velY_pred) in files:
        images.append(Image("vyp{}".format(x), path + files))
    elif str(velY_target) in files:
        images.append(Image("vyt{}".format(x), path + files))
    break

【讨论】:

  • 不要太挑剔,但如果你的类只有一个方法并且该方法是__init__ 方法,那么你可能不应该使用类。尤其是当它以更少的步骤完成与字典相同的事情时。
  • 是的,这可能是真的。我想@Gabip 有更多的计划,而不仅仅是存储可能有用的图像。
【解决方案2】:

您不能为字符串("vyt{}".format(x) 是字符串)分配另一个值。 我建议您将函数输出分配给字典中的指定键:

mapping = dict()
if str(pressure_pred) in files:
                mapping["pp{}".format(x)] = mpimg.imread(path + files) 
elif ...
...

# You will have to change it in all your conditions
# and then you will be able to access it as follows:
res = mapping["vytX"] # where vytX is the desired variable

【讨论】:

    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2015-01-05
    相关资源
    最近更新 更多