从文件中读取逗号分隔的值而不使用循环?

时间:2019-01-22 00:44:25

标签: python csv

如果文本文件的每一行看起来都像这样

Carlos Guestrin,CIS 41A,4.5,A,BUS 55,5,A,BUS 18,5,B+,HUMI 16,4,A-

如何不使用循环将所有数据读入数据结构?我正在考虑将名称(Carlos)作为一个实例变量,并且仅将名称之后的值存储到数据结构中,即元组字典(以类名作为键值)

3 个答案:

答案 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-']