2011-03-29 228 views
2

所以我有一个名为“Students.txt”这个txt文件,我想定义一个函数调用的负载(学生) ,所以我有这样的代码:转换列表字典

def load(student): 
     body 

即时通讯不太清楚为代码体写什么,以便它读取文件并以字典形式返回文件中的值。我知道这会是这样的readlines方法() 反正文件students.txt看起来是这样的:

P883, Michael Smith, 1991 
L672, Jane Collins, 1992 
(added)L322, Randy Green, 1992 
H732, Justin Wood, 1995(added) 
^key ^name  ^year of birth 

的函数必须返回作为,看起来像这样一本字典:

{'P883': ('Michael Smith',1991), 
'(key)':('name','year')} 

我设法通过试验和错误返回值,但我不能换行并继续返回\ n。

=============== 这个问题已经得到解答,我使用下面的代码,它完美地工作,但是当txt文件中的值存在空格时..(看到增加的部分),它不工作了,并给了一个错误,指出列表索引超出范围

+0

你有使用'csv'模块问题太?增加的数据和原始文件有什么区别?我没有看到任何... – 2011-03-29 13:39:00

回答

2

像这样的东西应该这样做,我想:

students = {} 

infile = open("students.txt") 
for line in infile: 
    line = line.strip() 
    parts = [p.strip() for p in line.split(",")] 
    students[parts[0]] = (parts[1], parts[2]) 

这可能不是100%,但应给你一个起点。为简洁起见,省略错误处理。

1
def load(students_file): 
    result = {} 
    for line in students_file: 
     key, name, year_of_birth = [x.strip() for x in line.split(",")] 
     result[key] = (name, year_of_birth) 
    return result 
+0

如果你'.split(',')',然后'.strip()'每个元素删除空格。 – eumiro 2011-03-29 12:16:38

0

我会用pickle模块在Python中的数据保存为一个字典,所以你可以通过取储存很容易加载它。或者,您可以这样做:

d = {} 
with open('Students.txt', 'r') as f: 
    for line in f: 
    tmp = line.strip().split(',') 
    d[tmp[0]] = tuple(tmp[1],tmp[2]) 
3

看起来像一个CSV文件。您可以使用csv模块则:

import csv 
studentReader = csv.reader(open('Students.txt', 'rb'), delimiter=',', skipinitialspace=True) 
d = dict() 
for row in studentReader: 
    d[row[0]] = tuple(row[1:]) 

这会不会给你一年的整数,你必须自己去改造它:

for row in studentReader: 
    d[row[0]] = tuple(row[1], int(row[2])) 
+0

+1是唯一提及CSV的人。但是在某些情况下,您已经将CVS而不是CSV。 – 2011-03-29 12:21:13

+0

@StephenPaulger:刚刚注意到它;)谢谢... – 2011-03-29 12:22:05

+0

您可以通过阅读器删除领先的空格:'csv.reader(open('students.txt'),delimiter =',',skipinitialspace = True)' – juanchopanza 2011-03-29 12:26:37