简体   繁体   English

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

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

I am relatively new to Python and working with inputting and outputting in files. 我是Python的新手,致力于文件的输入和输出。 Here is the input file: 这是输入文件:

1 3
1 1
1 0
20 30

and here is my code that takes this as "soccer_in.txt" and is suppose to output the following into "soccer_out.txt": 这是我的代码,将其作为“ 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

using this code: 使用此代码:

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)

I am not getting any errors, but my output file is empty when I run my code. 我没有收到任何错误,但是运行代码时输出文件为空。 I am not sure what is happening and any help would be appreciated. 我不确定发生了什么,任何帮助将不胜感激。 Thank you! 谢谢!

Edit: None of the proposed solutions have worked so far. 编辑:到目前为止,所有提议的解决方案都没有起作用。 I run the file, and "soccer-output.txt" is still blank. 我运行该文件,“ soccer-output.txt”仍然为空。 I see the issue with closing the file, but that has not solved the fact that the output file is empty. 我看到了关闭文件的问题,但是并没有解决输出文件为空的事实。

EDIT 2: NEVERMIND! 编辑2:没关系! i had the input file open on my computer which was not allowing the code to work. 我在计算机上打开了输入文件,这不允许代码工作。 Thank you all 谢谢你们

You should rewrite your code into context manager form: 您应该将代码重写为上下文管理器形式:

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 context manager, file object will be automatically closed. 使用上下文管理器,文件对象将自动关闭。 So you needn't to worry about the closing. 因此,您不必担心结账。

The problem is that you are failing to close the file after you have opened it. 问题是打开文件后您无法关闭文件。 To help in preventing this, please use the with context manager to read and write files. 为了帮助防止这种情况,请使用with上下文管理器来读取和写入文件。

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

You do not NEED to close your files. 您不需要关闭文件。 Although you SHOULD. 虽然你应该。

Garbage Collector will take care of it. 垃圾收集器会照顾好它。 but you do need to change your code, accounting for newlines with \\n and also you need to split your lines into words in your process_seasons function. 但是您确实需要更改代码,使用\\n来考虑换行符,并且还需要在process_seasons函数中将行拆分为单词。 ..The following code runs on my computer and supplies the output you are looking for. ..以下代码在我的计算机上运行,​​并提供您要查找的输出。

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