在Python中对文本文件的内容进行排序和对齐

在Python中对文本文件的内容进行排序和对齐,python,Python,在我的程序中,我有一个文本文件,可以读取和写入。但是,我希望以对齐和排序的方式显示文本文件的内容。目前的内容如下: Emily, 6 Sarah, 4 Jess, 7 这是我的代码,其中文本文件处于读取和打印状态: elif userCommand == 'V': print "High Scores:" scoresFile = open("scores1.txt", 'r') scores = scoresFile.read().split("\n") fo

在我的程序中,我有一个文本文件,可以读取和写入。但是,我希望以对齐和排序的方式显示文本文件的内容。目前的内容如下:

Emily, 6
Sarah, 4
Jess, 7
这是我的代码,其中文本文件处于读取和打印状态:

elif userCommand == 'V':
    print "High Scores:"
    scoresFile = open("scores1.txt", 'r')
    scores = scoresFile.read().split("\n")
    for score in scores:
        print score
    scoresFile.close()
我是否必须将这些信息转换为列表才能执行此操作?如果是的话,我该怎么做呢

写入文件时,我在末尾添加了一个“\n”字符,因为每条记录都应打印在新行上

谢谢

您可以使用模块,然后可以使用
排序
进行排序

比如说,scores1.txt有以下内容

Richard,100
Michael,200
Ricky,150
Chaung,100
试验

  • 要在Python中对内容进行排序,可以使用
  • 要打印,您可以将打印与格式说明符str.rjust/str.ljust、pprint等一起使用

  • 看起来没有人回答你请求中的“对齐”部分。此外,还不清楚您是希望结果按名称字母顺序排序,还是按分数排序。在第一种情况下,按字母顺序(假设Python 2.6):

    如果要按分数降序排列,只需将
    名称\u scores.sort()
    行更改为两行:

    def getscore_int(name_score): return int(name_score[1])
    names_scores.sort(key=getscore_int, reverse=True)
    

    我没看见。提供示例输入和输出。我在上面添加了我的代码,用于读取和打印文本文件的内容。你能给我更多关于如何使用csv模块及其功能的信息吗?@Emily,添加了一些测试代码,如果你还有一些问题,请告诉我我仍然有问题,我很抱歉。我没法让它工作。每条记录也必须打印在新行上。@Emily,你的scores1.txt是什么样子的?你能发一部分吗?@Emily,要打印出来,你只需要循环一下it@Alex,也许是打字错误?行以“name_width=”开头,行以“score_width=”应该以a结尾“”,而不是“]”孙强——你说得对,tx发现了这一点。编辑以修复。按分数升序如何?是否可以在不定义函数的情况下获得升序?@Emily,升序与降序仅取决于是否向调用中添加
    reverse=True
    。将分数提取为
    int
    以进行排序(这样11之前的2次排序等)确实需要一个函数,但如果您坚持(使代码不那么清晰),您可以不命名它(使用
    lambda
    )。或者,您可以改为使用
    namescore[1]=int(namescore[1])
    的循环,然后使用
    operator.itemgetter
    (也不太清楚IMNSHO)。
    with open("scores1.txt", 'r') as scoresFile:
      names_scores = [[x.strip() for x in l.split(',', 1)] for l in scoresFile]
    # compute column widths
    name_width = max(len(name) for name, score in names_scores)
    score_width = max(len(score) for name, score in names_scores)
    # sort and print
    names_scores.sort()
    for name, score in names_scores:
      print "%*s %*s" % (name_width, name, score_width, score)
    
    def getscore_int(name_score): return int(name_score[1])
    names_scores.sort(key=getscore_int, reverse=True)