如果文本文件的每一行看起来都像这样
Carlos Guestrin,CIS 41A,4.5,A,BUS 55,5,A,BUS 18,5,B+,HUMI 16,4,A-
如何不使用循环将所有数据读入数据结构?我正在考虑将名称(Carlos)作为一个实例变量,并且仅将名称之后的值存储到数据结构中,即元组字典(以类名作为键值)
答案 0 :(得分:1)
您可以使用csv库:
import csv
with open('file.csv') as f:
data = list(csv.reader(f))
数据成为列表列表,每个列表都是文件中的一行。
编辑:
要将其转化为元组字典,您可以使用dict理解进一步处理它:
data = {i[1]: {"Name": i[0], "Grades": tuple(i[1:])} for i in data}
如果您要摆脱第一行,只需切片数据(data = data[1:]
)
答案 1 :(得分:0)
为什么不能使用循环?如果您可以使用字典理解,则可以执行以下操作:
row = line.strip().split(',')
record = {"name": line[0], "grades": {row[i]: row[i+1]} for i in range(1, len(row), 2}}
您也可以使用类实例代替字典。
您可以像在@Primusa的答案中那样使用split()
库,而不是显式地调用csv
,以将每一行读入一个列表,然后使用上面的字典理解将其重新排列为更结构化的形式。
答案 2 :(得分:0)
您在代码中使用str.spltline()
,该代码将返回list
个字符串。
E.G。
from pprint import pprint
filename = 'test_data'
with open(filename, 'r') as inp:
data = inp.read().splitlines()
pprint(data)
示例输出:
['Carlos Guestrin1,CIS 41A,4.5,A,BUS 55,5,A,BUS 18,5,B+,HUMI 16,4,A-',
'Carlos Guestrin2,CIS 41A,4.5,A,BUS 55,5,A,BUS 18,5,B+,HUMI 16,4,A-',
'Carlos Guestrin3,CIS 41A,4.5,A,BUS 55,5,A,BUS 18,5,B+,HUMI 16,4,A-']