Условная загрузка файлов и маркировка python - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь создать функцию, которая загружает определенные изображения из каталога. Условие состоит в том, что если имя изображения содержит определенное число, то оно должно быть загружено как объект (с именем и номером).

Вот что я сделал до сих пор:

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

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Вы не можете условно пометить переменную.

"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
1 голос
/ 08 апреля 2020

Вы не можете присвоить в строку ("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
...