2

所以我有这个名为“Students.txt”的 txt 文件,我想定义一个名为 load(student) 的函数,所以我有这个代码:

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 文件中的值中有空格时,它可以正常工作。(请参阅添加的部分)不再工作,并给出一个错误,指出列表索引超出范围

4

4 回答 4

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]))
于 2011-03-29T12:18:27.117 回答
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%,但应该给你一个起点。为简洁起见,省略了错误处理。

于 2011-03-29T12:13:23.403 回答
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
于 2011-03-29T12:15:00.640 回答
0

我会使用 python 中的pickle模块将你的数据保存为一个字典,这样你就可以通过 unpickling 轻松加载它。或者,你可以这样做:

d = {}
with open('Students.txt', 'r') as f:
  for line in f:
    tmp = line.strip().split(',')
    d[tmp[0]] = tuple(tmp[1],tmp[2])
于 2011-03-29T12:15:49.927 回答