2016-04-28 24 views
1

私は練習として数学クイズを行っています。タスク3の一部は、名前とスコアを含むCSVファイルをアルファベット順に整理することです。私はいくつかのコードを書いていますが、期待通りに動作させる方法を知りたいと思います。私は何をしたのか分からないので、説明を簡単にしてください。Pythonでアルファベット順に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

+0

コードは機能しますか? 'score_file'はあなたが並べ替えることのできるリストではありません。最初に行を読む必要があります。 –

+0

@DisplayNameどうすればそれをより良くすることができますか? –

+0

多分これを見てください:https://docs.python.org/3/library/csv.html?highlight=csv#csv.reader おそらく助けることができるcsvリーダー – SSchneid

答えて

1

はここで何が起こっているかを参照してください?

空でない文字列は、Trueと評価されます。空の文字列とキーワードNoneFalseと評価されます(例が多分あります)。 これは、入力した内容に関係なく、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

おかあさんこれほど大きな助けになっています! –

+0

@ClareJordan私はうれしいです:)あなたは大歓迎です – jDo

関連する問題