2017-10-09 70 views
2

我對Python比較陌生,正在處理輸入和輸出文件。這裏是輸入文件:(Python初學者)我的代碼中輸出文件爲空

1 3 
1 1 
1 0 
20 30 

,這裏是我的代碼,將其作爲「soccer_in.txt」,並假設輸出以下爲「soccer_out.txt」:使用該

Season: 1, Games Played: 1, Points earned: 3 
Possible Win-Tie-Loss Records 
----------------------------- 
1-0-0 

Season: 2, Games Played: 1, Points earned: 1 
Possible Win-Tie-Loss Records 
----------------------------- 
0-1-0 

Season: 3, Games Played: 1, Points earned: 0 
Possible Win-Tie-Loss Records 
----------------------------- 
0-0-1 

Season: 4, Games Played: 20, Points earned: 30 
Possible Win-Tie-Loss Records 
----------------------------- 
10-0-10 
9-3-8 
8-6-6 
7-9-4 
6-12-2 
5-15-0 

代碼:

def process_season(output_file, season, games_played, points_earned): 
    output_file.write("Season: " + str(season) + ", Games Played: " + str(games_played) + 
      ", Points earned: " + str(points_earned)) 
    output_file.write("Possible Win-Tie-Loss Records") 
    output_file.write("-----------------------------") 
    wins = int(points_earned) // 3 
    ties = int(points_earned) % 3 
    losses = int(games_played) - wins - ties 
    while (wins >= 0) and (losses >= 0): 
      output_file.write(str(wins) + "-" + str(ties) + "-" + str(losses)) 
      wins -= 1 
      ties += 3 
      losses -= 2 
# -------------------------------------- 
def process_seasons(input_file, output_file): 
    season_number = 0 
    for season in input_file: 
     season_number += 1 
    process_season(output_file, season_number, season[0], season[1]) 
# -------------------------------------- 
f_in=open("soccer-in.txt", "r") 
f_out=open("soccer-out.txt", "w+") 
process_seasons(f_in, f_out) 

我沒有得到任何錯誤,但我的輸出文件是空的,當我運行我的代碼。我不確定發生了什麼事情,任何幫助將不勝感激。 謝謝!

編輯:到目前爲止,所提出的解決方案都沒有工作。我運行該文件,「soccer-output.txt」仍然是空白。我看到關閉文件的問題,但這並沒有解決輸出文件爲空的事實。

編輯2:NEVERMIND!我在我的電腦上打開了輸入文件,該文件不允許代碼工作。謝謝大家

+1

把'output_file.close()'放在'process_season()'函數的末尾,看它是否有效。 – Unni

+0

你在哪裏關閉輸出文件? – toonarmycaptain

+0

你不需要關閉文件。 垃圾回收期間,Python將爲您關閉文件。 這不是錯誤的原因。 – 0TTT0

回答

0

你應該重寫你的代碼上下文管理形式:

def process_season(output_file, season, games_played, points_earned): 
    output_file.write("Season: " + str(season) + ", Games Played: " + str(games_played) + 
      ", Points earned: " + str(points_earned)) 
    output_file.write("Possible Win-Tie-Loss Records") 
    output_file.write("-----------------------------") 
    wins = int(points_earned) // 3 
    ties = int(points_earned) % 3 
    losses = int(games_played) - wins - ties 
    while (wins >= 0) and (losses >= 0): 
      output_file.write(str(wins) + "-" + str(ties) + "-" + str(losses)) 
      wins -= 1 
      ties += 3 
      losses -= 2 
# -------------------------------------- 
def process_seasons(input_file, output_file): 
    season_number = 0 
    for season in input_file: 
     season_number += 1 
    process_season(output_file, season_number, season[0], season[1]) 
# -------------------------------------- 
with open("soccer-in.txt", "r") as f_in: 
    with open("soccer-out.txt", "w+") as f_out: 
     process_seasons(f_in, f_out) 

隨着上下文管理器,文件對象將自動關閉。所以你不必擔心關閉。

0

問題在於打開文件後無法關閉文件。爲了幫助防止這種情況,請使用with context manager來讀取和寫入文件。

with open(file_name, 'r') as f: 
    f.read() 
with open(file_name, 'w') as f: 
    f.write(data) 
0

您不需要關閉文件。雖然你應該。

垃圾收集器會照顧它。 但您確實需要更改您的代碼,並使用\n來說明換行符,並且您還需要將您的行分割爲process_seasons函數中的單詞。 ..以下代碼在我的電腦上運行,並提供您正在查找的輸出。

def process_season(output_file, season, games_played, points_earned): 
    output_file.write("Season: " + str(season) + ", Games Played: " + str(games_played) + 
      ", Points earned: " + str(points_earned) + '\n') 
    output_file.write("Possible Win-Tie-Loss Records\n") 
    output_file.write("-----------------------------\n") 
    wins = int(points_earned) // 3 
    ties = int(points_earned) % 3 
    losses = int(games_played) - wins - ties 
    while (wins >= 0) and (losses >= 0): 
      output_file.write(str(wins) + "-" + str(ties) + "-" + str(losses)+'\n') 
      wins -= 1 
      ties += 3 
      losses -= 2 
# -------------------------------------- 
def process_seasons(input_file, output_file): 
    season_number = 0 
    for season in input_file: 
     season_number += 1 
     seas = season.split() 
     process_season(output_file, season_number, seas[0], seas[1]) 
# -------------------------------------- 
f_in=open("soccer-in.txt", "r") 
f_out=open("soccer-out.txt", "w+") 
process_seasons(f_in, f_out) 
+1

不要鼓勵這種可怕的做法。這在很多情況下會咬人。雖然我不會失望,因爲你確實暴露了一個bug。 – Shadow