繁体   English   中英

(Python初学者)我的代码中的输出文件为空

[英](Python Beginner) Output file is empty in my code

我是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:没关系! 我在计算机上打开了输入文件,这不允许代码工作。 谢谢你们

您应该将代码重写为上下文管理器形式:

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)

使用上下文管理器,文件对象将自动关闭。 因此,您不必担心结账。

问题是打开文件后您无法关闭文件。 为了帮助防止这种情况,请使用with上下文管理器来读取和写入文件。

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

您不需要关闭文件。 虽然你应该。

垃圾收集器会照顾好它。 但是您确实需要更改代码,使用\\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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM