我已阅读.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 :(得分: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}}