2013-03-04 63 views
1

外部文件的內容是這樣的:如何從外部文件列出python中的數字?

Ricky, 12 
Sachin, 45 
Brian, 2 
Monty, 1 

我基本上想要做的是能在蟒蛇閱讀本並能夠爲了它,所以它在底部和最高去最低分得分最高。

這裏是我到目前爲止的代碼:

def SaveTopScores(): 
    return HiScores.rsplit('(',1)[1] 

    with open("HiScores.txt", "r")as file: 
    HiScoreslist = HiScores.read().splitlines() 

    HiScoreslist.sort() 

    HiScoreslist.sort(key=HiScore) 

    for HiScore in HiScoreslist: 
    print(HiScore) 

我還是Python的新手和確實需要幫助。請糾正我錯在哪裏,並告訴我我是否完全錯誤,如果有的話,我最好解決問題的方法是什麼?

+2

是壓痕是否正確?因爲你正好在函數體的第一行返回,其餘的都不會被執行。 – 2013-03-04 12:01:36

+0

感謝您的編輯:)我認爲這是正確的。我通過做一個類似的事情做了一個練習,我從電影列表中訂購了電影年,並且工作。所以現在我很困惑?如果你認爲有更好的方法,請告訴我如何。我不知道該怎麼辦。 :( – PythonNovice 2013-03-04 12:04:41

+1

你做了一個rsplit,尋找一個左括號,那個字符不在輸入文件中,那麼你爲什麼要這樣做? – Anthon 2013-03-04 12:06:41

回答

2

隨着一些列表內涵:

with open("HiScores.txt") as hiscores: 
    scores = [line.split(',') for line in hiscores if line.strip()] 
scores = [(name.strip(), int(score)) for name, score in scores] 
scores.sort(key=lambda s: s[1], reversed=True) 

for name, score in scores: 
    print('{:<20} {:>10}'.format(name, score)) 

此:

  1. 打開該文件作爲上下文管理器(with ... as ...),所以它會自動關閉
  2. 遍歷文件拆分每行(提供的行不是空的)
  3. 將每個2-VA在該文件中略進入汽提柱和一個整數
  4. 排序在每個元組(分數)的第二個值的文件,扭轉了結果(最高得分第一)
  5. 打印每個條目格式化(對準每個名左邊是一個20個字符的區域,每個分數在10個字符的區域右邊)。
+0

謝謝你的幫助。 :) – PythonNovice 2013-03-04 12:12:33

+0

(+1)檢查空行:-) – FakeRainBrigand 2013-03-04 12:24:21

1

那麼,有點像這樣?

def scores(fn): 

    data = [] 
    with open(fn) as f: 
     for ln in f: 
      name, score = ln.strip().split(',') 
      data.append((int(score.strip()), name)) 

    for score, name in sorted(data, reversed=True): 
     print name, score 
+0

謝謝你的幫助。:) – PythonNovice 2013-03-04 12:12:14

0

沒有太多的改變你的原代碼,這應該工作。如果您需要解釋任何部分,請告訴我。

with open("HiScores.txt", "r") as fin: 
    HiScores = fin.read().splitlines() 

HiScoresList = [] 

for score in HiScores: 
    name, score = score.split(', ') 
    score = int(score.strip()) 
    HiScoresList.append((name, score)) 

# Look at two score entries, and compare which score is larger 
def BestScore(a, b): 
    return cmp(b[1], a[1]) 

HiScoresList.sort(BestScore) 

for HiScore in HiScoresList: 
    print(HiScore) 

打印:

('Sachin', 45) 
('Ricky', 12) 
('Brian', 2) 
('Monty', 1) 
+0

感謝您的迴應。以及我有點理解這是如何工作的,你是否可以向我解釋什麼是'好'? – PythonNovice 2013-03-04 12:18:11

+0

'with'的語法爲'function_returning_file_object()as variable_to_hold_file_object:'。我只是叫我的變量,在這種情況下,'fin'或'fout'用於「文件輸入」或「文件輸出」。這比爲一個變量創建名稱想得更簡單,只需要一行代碼。把它叫做任何你喜歡的:-)只要確保你在同一個變量上調用'.read()'。 – FakeRainBrigand 2013-03-04 12:22:42

+0

好的謝謝你:) – PythonNovice 2013-03-04 12:24:10

相關問題