2016-03-26 11 views
-1

CSVファイルから質問を受け取り、質問してスコアを重み付けしたプログラムを作成しようとしています。最低得点が最初に出ます。os関数の後にCSVのPythonが範囲外になる

これにはソート機能があります。

def sort_records(csv_filename, sorted_file): 
    with open(csv_filename, 'r') as i, open(sorted_file, 'w') as o: 
     reader = csv.reader(i, delimiter = ',') 
     writer = csv.writer(o, delimiter=',') 
     writer.writerow(next(reader)) # header row 
     writer.writerows(sorted(reader, key=operator.itemgetter(0))) 

これは初めて問題なく動作します。

質問がもう出ることがなくなり、ユーザーがプログラムを再度実行することを決定した場合、(new_filenameとanswer_fileという名前の)新しいファイルが作成され、元のファイルが削除され、ソートされますファイル(ファイル、sorted_file)を単に「ファイル」

def end(file, updated_file, sorted_file): 
    ans_ok = False 
    while ans_ok == False: 
     ans = input("That's all folks... go again? Y/N: ") 
     ans.upper() 
     if ans == 'N': 
      print("Press Enter to Exit...") 
      input(" ") 
      ans_ok = True 
     elif ans == 'Y': 
      os.remove(file) 
      os.remove(newfile) 
      os.rename(updated_file,file) 
      print("\n Ok!\n") 
      main() 

そして私は再びメイン関数を実行しようとすると、それが動作し、その後その更新されたファイルを sort_records機能を実行し、更新されたファイル(answer_file)の名前を変更します名前が変更されたばかりですが、これは次のようになります。

line 24, in sort_records 
writer.writerows(sorted(reader, key=operator.itemgetter(0))) 
IndexError: list index out of range 

EDIT。これは、私がメモ帳の外に二つのファイルのテキストを比較していることを発見したこれらの

def main(): 
    path_ok = False 
    while path_ok == False: 
     try: 
      file = input("Subject File: ") 
      sorted_file = file[:-4]+'_sorted.sar' 
      sort_records(file,sorted_file) 
      path_ok = True 
     except IOError: 
      print("\tFile not found. Please input valid filename or path") 

    updated_file = sorted_file[:-4]+'_final.sar' 
    rownum = 0 
    with open(newfile) as csvfile: 
     reader = csv.DictReader(csvfile) 
     for row in reader: 
      rownum+=1 
      ask_question(row,updated_file,reader,sorted_file,file,rownum) 
    end(file, updated_file, sorted_file) 

メインもプログラムに最初に呼び出される関数です

UPDATE の両方を呼び出す主な機能でありますプログラムによって生成される新しいファイルは、次のようになります。 The text in both files

メモ帳は何らかの理由でこれを表示しませんでした。

今、私は別の質問があります。

私はそれが自動的に-の間に書かれている行の空白行を入れずにPythonでCSVファイルに書き込むにはどうすればよいですか?

+0

あなたは 'end'と' sort_records'関数を呼び出す場所からコードを追加します – kvorobiev

+0

ありがとう、ありがとう –

+0

最初にではなく、最後に投稿するときに私は問題があったことを認識しませんでした各行の間の空白行、その質問へのリンクの私の答えを参照してください。私はここに全体的な質問を残して、同様の問題を抱えている人(これが起こるかもしれない)がこれを見ることができるようにしました。 –

答えて

関連する問題