在Python中,从文件中读取每行中包含不同数量组件的数据

在Python中,从文件中读取每行中包含不同数量组件的数据,python,readfile,Python,Readfile,在这个项目中,我需要读取带有未知数据的输入文件,并将其放入字典中。第一列将始终是name,而其余列将始终是value。但是,我们不知道它可以包含多少列值。例如: name1;1;2;3;4 name2;1;1;1 name3;5;6 name4;9 我正在考虑使用split(“;”),但每行可能有不同的列 for line in file: line = line.rstrip() name, value = line.split(';') ValueError: too many

在这个项目中,我需要读取带有未知数据的输入文件,并将其放入字典中。第一列将始终是name,而其余列将始终是value。但是,我们不知道它可以包含多少列值。例如:

name1;1;2;3;4
name2;1;1;1
name3;5;6
name4;9
我正在考虑使用split(“;”),但每行可能有不同的列

for line in file:
   line = line.rstrip()
   name, value = line.split(';')
ValueError: too many values to unpack
最终结果:

d={name1:[1,2,3,4], name2:[1,1,1], name3:[5,6], name4:[9]}
非常感谢你的帮助

在这里使用
split(“;”)
是个好主意,这应该适合您:

filename = 'path_to_your_file'
res={}
with open(filename, 'r') as file: #opens your file in reading mode
    for line in file: #reads the file line by line
        temp = line.rstrip('\n') #removes ending newline characters
        temp = temp.split(';') #split string by ';' into a list
        res[temp.pop(0)]=temp #uses the first element of the list as dictionary key, and the rest of the list as value
print(res)

你快到了!拆分行并使用多个赋值是正确的想法。缺少的一点是,您可以在多个赋值中使用
*
,使一个部分具有可变长度。查看各种用法和习惯用法的详细介绍

result={}
打开(“您的文件的名称”)作为文件:
对于文件中的行:
#将name设置为第一个元素,将value设置为其余元素。
名称,*value=line.rstrip().split(“;”)
结果[名称]=值

在将行读入列表后,您可以使用dict comprehension执行此操作-

将所有行读入列表-

list1 = ['name1;1;2;3;4',
'name2;1;1;1',
'name3;5;6',
'name4;9']
使用听写理解-

result_dict  ={item.split(';')[0]: item.split(';')[1:] for item in list1}
print(result_dict) 
输出-

{'name1': ['1', '2', '3', '4'],
 'name2': ['1', '1', '1'],
 'name3': ['5', '6'],
 'name4': ['9']}

你试过你的主意吗?你得到了什么结果?这和你想要的有什么不同?@CrazyChucky:嗨!谢谢你的回答。我不知道*数据能让它工作。在此之前,我只使用name,data=line.split(“;”),因此它给出了ValueError:太多的值需要解包。不管怎样,多亏了你,它现在开始工作了!当然可以作为将来的参考,在你的问题中包含这类信息是一件好事。(事实上,把它编辑成这个问题并不是一个坏主意,如果其他人遇到它,它会对他们更有用。)@CrazyChucky:谢谢你的提示!这是一个很好的编辑,除了不要给你的问题添加答案。这就是答案所在。