Я прочитал в TXT-файл и разбил эти строки на список. Этот список содержит информацию заголовка и данные. Я хочу использовать информацию заголовка, чтобы назвать последующие списки. Поскольку все данные, содержащиеся в исходном списке (ниже он обозначен как My_list), являются строками, это объект, который не поддерживает назначение элементов. Я пытаюсь создать новые списки объектов с их именами, определенными строками в существующем списке.

Я хотел бы, чтобы Name1 и Name2 были именами объектов списка, к которым я могу добавлять данные.

Ошибки включают в себя объект 'str' не поддерживает назначение элемента, а объект 'str' не имеет атрибута 'append'.

Эти ошибки не являются неожиданными, но я не уверен, как превратить эту строку в имя моего нового списка.

    My_list = [line.split() for line in open("file.txt", "r") ]

    ListNames = My_list[0]

    #My_List[0] = ['Name1','Name2']

    for i in range(1,len(My_list)):
        ListNames[0].append(My_list[i][0])
        ListNames[1].append(My_list[i][1])
0
LShearer 1 Июл 2019 в 20:03

3 ответа

Лучший ответ

Поскольку списки точно не имеют «имен» (что вы можете спутать со ссылкой), возможно, вы могли бы использовать словари:

my_list = [line.split() for line in open("file.txt", "r") ]

lists = {name: [] for name in my_List[0]}  # my_List[0] = ['Name1','Name2']

for i in range(1,len(my_list)):
    lists['Name1'].append(my_list[i][0])
    lists['Name2'].append(my_list[i][1])

Но в целом старайтесь не читать весь файл в список (или строку). Там, где это возможно, гораздо эффективнее использовать итераторы. Ваш случай определенно позволяет это:

with open("file.txt") as in_f:
    first_line = in_f.readline().strip().split()

    lists = {name: [] for name in first_line}

    for line in in_f:
        line_as_list = line.split()
        lists['Name1'].append(line_as_list[0])
        lists['Name2'].append(line_as_list[1])

Если под именем вы подразумеваете ссылку на список, как при создании переменной с таким именем, которая указывает на список, вы можете использовать exec:

with open("file.txt") as in_f:
    first_line = in_f.readline().strip().split()  # first_line = ['Name1','Name2']

    for name in first_line:
        exec(f"{name} = []")

    for line in in_f:
        line_as_list = line.split()
        Name1.append(line_as_list[0])
        Name2.append(line_as_list[1])

Прочитайте документы о exec

0
Tomerikoo 3 Июл 2019 в 12:46

Если вы получите список:

my_list = ['Name1','Name2']

Вы можете создать dict с помощью этого списка ключей и добавить его:

my_list = ['Name1','Name2']
my_dict = {}

for items in my_list:
    #generate keys
    my_dict.setdefault(items,{})
#put new data in key
my_idct["Name1"].update({"Nev_key": "New_value"})

Итак, ваш новый список будет примерно таким:

{'Name1': {'Nev_key': 'New_value'}, 'Name2': {}}
0
Mike Mint 1 Июл 2019 в 17:56

Если вы читаете файл как одну большую строку, вы можете сделать что-то вроде этого

lines = []
tempstr = ""

for i in filestring:

    if i == "\n":
        lines.append(tempstr)
        tempstr = ""

    else:
        tempstr+=i

Это позволяет вашей программе обнаруживать и игнорировать символы новой строки

Надеюсь это поможет

0
gerard Garvey 1 Июл 2019 в 17:32