2011-03-29 147 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