在Python上按字母顺序排序csv文件

时间:2016-04-28 12:04:16

标签: python file sorting python-3.x csv

我做了一个数学测验作为练习。任务3的一部分是组织一个CSV文件,其中包含按字母顺序排列的名称和分数。我已经完成了一些代码,但我想知道如何使它像我期望的那样工作。我不确定我做了什么,所以请你能解释一下。

data = input('How would you like the data? a for alphabetically, b for highest score  to lowest and c for average score highest to lowest. press q to exit: ')
if 'a':
    score_file = open('scorefile.csv')
    for x in sorted (score_file, key=str.lower):
        print (x)

这是它运行时的样子: code running

1 个答案:

答案 0 :(得分:1)

看看这里发生了什么?

>>> if "a":
...     print ("True!")
... else:
...     print("False!")
... 
True!
>>> 
>>> if "aadasgabherbasdvc23d3wv":
...     print ("True!")
... else:
...     print("False!")
... 
True!
>>> 
>>> if "":
...     print ("True!")
... else:
...     print("False!")
... 
False!
>>> 
>>> if None:
...     print ("True!")
... else:
...     print("False!")
... 
False!
>>> 

任何非空字符串都将评估为True。空字符串和关键字None评估为False(可能还有更多示例)。 这意味着无论您输入什么,都将执行嵌套在if 'a'下的代码。如果/当您为用户输入编写代码" b"和" c",你会看到这一点。

如果您想将用户输入与字符串'a'进行比较,您可以这样做:

data = input('How would you like the data? a for alphabetically, b for highest score  to lowest and c for average score highest to lowest. press q to exit: ')
if data == 'a':
    # do something  

关于代码的其余部分...... Python有一个csv模块。您可以轻松地手动拆分csv文件,因为它应该以逗号分隔,但csv模块以稍微复杂的方式处理它(我不确定,但我认为它理解带有逗号的值,例如)。

当您使用open()时,请勿忘记之后致电close()。您可以使用open/close(称为上下文管理器btw)完全避免此with业务。然后你可以做

import csv

with open('scorefile.csv', 'r') as csv_file:
    rows = csv.reader(csv_file)

with open('scorefile.csv', 'r') as csv_file:
    for line in csv_file:
       ...

或者你想对文件做什么。关键点在于,一旦您完成数据读取,使用with会自动关闭文件。这样,您就不必记得拨打close()