1

如果给你一个.txt file包含这些内容的:

James Doe 2/16/96 IT210 A BUS222 B PHY100 C
John Gates 4/17/95 IT101 C MATH112 B CHEM123 A
Butch Thomas 1/28/95 CS100 C MATH115 C CHEM123 B

你怎么能得到它,所以它需要班级名称和成绩并将它们放入一个空字典而忽略其余部分?我设置了代码来阅读.txt file但卡住了。有什么建议么?

这是我打开文件的代码:

def readFile():
    new_dict = {}
    myFile = open('Students.txt', 'r')
    for line in myFile:
4

6 回答 6

2

为什么不使用字典列表,而不是为每个学生制作不同的变量?

请参阅下面的代码:

>>> dictList = []
>>> with open('Students.txt', 'r') as f:
        for line in f:
            elements = line.rstrip().split(" ")[3:]
            dictList.append(dict(zip(elements[::2], elements[1::2])))       
>>> dictList
[{'IT210': 'A', 'PHY100': 'C', 'BUS222': 'B'}, {'IT101': 'C', 'MATH112': 'B', 'CHEM123': 'A'}, {'CS100': 'C', 'CHEM123': 'B', 'MATH115': 'C'}]

如果您希望保持字典中 txt 文件中给出的顺序,请查看OrderedDict.

于 2013-07-18T04:48:20.470 回答
1

安瑟:

def readFile():
    new_dict = {}
    myFile = open('Students.txt', 'r')
    for line in myFile:
        line2=line.split()
        class1=line2[3]
        gra=line2[4]
        new_dict[class1]=gra
于 2016-09-05T08:35:58.477 回答
0

下面的代码做你想要的。

import re

student = 'James Doe 2/16/96  IT210 A BUS222 B PHY100 C'
pattern = '([0-9]{1,2}/[0-9]{1,2}/[0-9]{1,2})'
end = re.search(pattern, student).end()
found = student[end+2:]
x = found.split(' ')
numberOfEntries = len(x) / 2
i = 0
Dict = {}

while i < numberOfEntries:
    Dict[x[i]] = x[i+1]
    i = i + 1

print Dict
于 2013-07-18T05:05:00.973 回答
0
dic={}
for line in myFile:
   info=line.split(' ')
   firstname=info[0]
   lastname=info[1]
   firstClass=info[3]
   firstgrade=info[4]
   secondClass=info[5]
   secondgrade=info[6]
   thirdClass=info[7]
   thirdGrade=info[8]
   gradeInfo={firstClass:firstgrade,secondClass:secondgrade,thirdClass:thirdgrade}
   name='%s %s' %(firstname,lastname)
   dic+={name,gradeInfo}
于 2013-07-18T05:11:37.550 回答
0
student_dict = {}
for line in open('input','r'):
    line2=line.split()
    name = ' '.join(line2[0:2])
    grades = line2[3:]
    grades_dict = {grades[i]:grades[i+1] for i in xrange(0,len(grades),2)}
    student_dict[name]=grades_dict

给出:

>>> student_dict
{'James Doe': {'IT210': 'A', 'PHY100': 'C', 'BUS222': 'B'}, 'Butch Thomas': {'CS100': 'C', 'CHEM123': 'B', 'MATH115': 'C'}, 'John Gates': {'IT101': 'C', 'MATH112': 'B', 'CHEM123': 'A'}}
于 2013-07-18T05:33:57.767 回答
0
li = []
with open("file.txt", 'r') as f:
    line = f.readline().split()
    while line:
        dict = {}
        dict[line[-6]] = line[-5]
        dict[line[-4]] = line[-3]
        dict[line[-2]] = line[-1]
        li.append(dict)
        line = f.readline().split()

li = [{'IT210': 'A', 'PHY100': 'C', 'BUS222': 'B'}, {'IT101': 'C', 'MATH112': 'B', 'CHEM123': 'A'}, {'CS100': 'C', 'CHEM123': 'B', 'MATH115': 'C'}]
于 2013-07-18T04:45:01.237 回答