2016-04-28 60 views
1

按字母順序排序的CSV文件我已經做了數學測驗的做法。任務3的一部分是按字母順序組織一個包含姓名和分數的CSV文件。我已經做了一些代碼,但我想知道如何使它像我期望的那樣工作。我不太確定我做了什麼,所以請你保持簡單的解釋。Python的

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

+0

請問你的代碼的工作? 'score_file'不是您可以排序的列表,您必須先閱讀這些行。 – 2016-04-28 12:06:59

+0

@DisplayName我怎麼改變它使它更好? –

+0

也許看看這個:https://docs.python.org/3/library/csv.html?highlight=csv#csv.reader 一個CSV閱讀器,大概能有所幫助 – SSchneid

回答

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()之後。您可以通過使用with(這被稱爲上下文管理器btw)完全避免這個open/close業務。那麼你可以做

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()

+0

thankyou這非常有幫助! –

+0

@ClareJordan我很高興:)不客氣 – jDo