@lemonlimelike

Как внести изменения в список?

Всем привет! Разработал графический интерфейс, использовал pysimplegui. В окошко(типа textarea) для текста записываются некие строки из списка, каждая строка с новой строчки. Эти строчки в дальнейшем должны изменяться и к ним должен добавляться еще текст, но у меня не получается это реализовать. Хелп

Вот код, который относится к моей проблеме.
list_default_alias = get_list_alias(values['file_input'])
str_alias = '\n'.join([item['brand'] for item in list_default_alias])
if list_default_alias:
    child_layout = [
        [sg.Multiline(default_text=str_alias,
                      key='list_alias', size=(40, 30))],
        [sg.Button(button_text='Сохранить изменения',
                   enable_events=True, key='Save_Change_Alias')]
    ]
    child_window = sg.Window('Alias', child_layout)

    while True:
        child_event, child_values = child_window.read(timeout=1000)
        if child_event in (None, 'Exit', 'Cancel'):
            break

        if child_event == 'Save_Change_Alias':
            '''Отлавливания события нажатия на кнопку'''
            list_values_alias = child_values['list_alias'].split('\n') # превращаем текст, который в окошке в список. Делаю так и тут, потому что этот список изменяется и мне нужно сохранить уже измененный список в файл
            with open('alias', 'r+') as file_alias:
                list_alias_file = [] # Достаю из файла все строки. Они нужны для проверки на дубликаты, чтоб не добавлять одинаковые записи
                for item in file_alias:
                    list_alias_file.append(
                        item.replace('\n', '').lower())
                '''Тут должна быть логика добавления уже измененного списка. Тут у меня и проблемы'''
                print(list_alias_file)
                for alias in list_values_alias:
                    for alias_file in list_alias_file:
                        if alias.replace('\n', '').lower() in alias_file:
                            file_alias.write(f'{alias_file},{alias}')

                    # if alias.replace('\n','').lower() not in list_alias_file:
                        # file_alias.write(alias+'\n')

    child_window.close()


Функция:

def get_list_alias(input_file_name):
    '''Получение списка товаров из файла'''
    if not input_file_name:
        return []
    list_data = []
    wb = load_workbook(filename=input_file_name)
    sheet = wb.active
    m_row = sheet.max_row

    for i in range(1, m_row+1):
        if not sheet.cell(row=i, column=1).value:
            continue
        brand = str(sheet.cell(row=i, column=2).value).replace(
            "'", '').title()
        object = {'brand': brand}
        if object not in list_data:
            list_data.append(object)

    return list_data


Пример списка, который приходит из функции в list_default_alias:
[{'brand': 'Bosch'}, {'brand': 'Bsg'}, {'brand': 'Contitech'}, {'brand': 'Dayco'}, {'brand': 'Delphi'}, {'brand': 'Denso'}, {'brand': 'Elring'}, {'brand': 'Gates '}, {'brand': 'General Motors'}]


И картинка как выглядит список после изменений
5f032a868c3e7676428157.png

Пример того как должен выглядить список до и после изменений:
До, это как на скрине. А после вот:
Bosch
Bsg
Contitech
Dayco
Delphi
Denso
Elring
Gates,Gat
General Motors,General+Motors


И так далее. То есть мне нужно, чтоб была возможность изменить список и сохранить на те же строки уже изменные строки. Заранне большое спасибо
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
Viji
@Viji
Junior DevOps Engineer
l_len=len(list_default_alias) -- длина списка
object = {'brand': "General Motors,General+Motors"}
list_default_alias[n] = object
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
OnederX Москва
от 100 000 до 120 000 ₽
NatsON Москва
от 220 000 до 350 000 ₽
SwapZilla.co Москва
от 200 000 ₽