读取.txt并将标题字符串用作列表名称

时间:2019-07-01 17:03:04

标签: python

我已阅读.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])

3 个答案:

答案 0 :(得分:0)

如果您以大字符串形式读取文件,则可以执行以下操作

lines = []
tempstr = ""

for i in filestring:

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

    else:
        tempstr+=i

这使您的程序能够检测和忽略换行符

希望这会有所帮助

答案 1 :(得分:0)

如果您获得列表:

my_list = ['Name1','Name2']

您可以使用此列表键创建字典并将其附加:

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': {}}

答案 2 :(得分:0)

由于列表并不完全具有“名称”(您可能会混淆引用),因此也许可以使用字典:

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的{​​{3}}