文本文件解释

时间:2015-04-20 16:36:02

标签: python

我目前有一个文本文件,其中包含使用我创建的测验的人的分数和名称。

  

鲍勃:8

     

露:5

     

约翰:2

     

鲍勃:6

     

克里斯:9

     

鲍勃:7

     

露:4

     

约翰:3

     

约翰:4

     

鲍勃:7

在Python中,我对如何打印列表中每个名称的最后三个分数感到困惑。比如,这应该打印鲍勃在他的名字旁边的7,7和6分,以及其他所有人的最后三分(当然,如果他们的分数少于三分,那么将会打印出来)。

我目前正在使用典型的方法解释该文件(可能不适合我的意图)。

x = open('Scores.txt', 'r')

2 个答案:

答案 0 :(得分:2)

你可以在4个python的东西上谷歌(或者只读官方的python文档) - 例如文件,字符串,字典和列表,最后会有几行python代码来处理它。因为这对于学习一些python而言似乎是一项任务......

如果您真的想学习,请为您考虑最佳解决方案 - 只需分割任务并按步骤进行,例如:你需要:

  1. 从文件中读取数据
  2. 解析行(拆分名称和分数)
  3. 将其存放在某处,例如在python字典中,Name作为键,python列表作为值。例如:scores['Bob'] == [8, 8, 7]看起来很容易理解。
  4. 关于在列表中添加值时空行和条件的一些思考可以为您提供所需的结果
  5. 很抱歉,因为没有提供我的~10行解决方案,但我认为学习某些东西的最好方法是自己学习它并对自己的成就(甚至是次要的)感到高兴,而不仅仅是复制其他代码。

答案 1 :(得分:1)

我将其分为两部分。

首先,这里是如何打印每个人的最后三个分数 数据集:

data = ['Bob:8', 'Lucy:5', 'John:2', 'Bob:6', 'Chris:9', 'Bob:7', 'Lucy:4',
        'John:3', 'John:4', 'Bob:7']
d = {}  # Create an empty dictionary.
for record in data:
    x, y = record.split(':')  # Splits each record on ':'.
    try:
        d[x].append(int(y))  # Append each value to a list in the dict by key, if it already exists...
    except KeyError:
        d[x] = [int(y),]   # ...otherwise, create the list.
for k in d.keys():
    print('%s: ' % k, end='')  # Print the name.
    for v in d[k][-3:]:
        print('%d ' % v, end='')  # Now print the last three values for each person.
    print('')

为了从文件中读取它们,您只需将其包装在with语句中:

with open('file.txt', 'r') as f:
    d = {}  # Create an empty dictionary.
    for record in f:
        x, y = record.split(':')  # Splits each record on ':'.
        try:
            d[x].append(int(y))  # Append each value to a list in the dict by key, if it already exists...
        except KeyError:
            d[x] = [int(y),]   # ...otherwise, create the list.
    for k in d.keys():
        print('%s: ' % k, end='')  # Print the name.
        for v in d[k][-3:]:
            print('%d ' % v, end='')  # Now print the last three values for each person.
        print('')