【问题标题】:Multiple lines in file appearing as only one line [duplicate]文件中的多行仅显示为一行[重复]
【发布时间】:2019-02-27 17:31:36
【问题描述】:

我正在尝试将一些变量保存到单独的文件中。

我的代码如下所示:

def saveall(sname, senemyname, scheckpoint,):
    file = open("savefile.sav", "w")
    file.writelines([sname, senemyname, scheckpoint])
    file.close()

如果我将saveall("John","Steve","Crossroads") 放入我的代码中,我希望它创建一个名为 savefile.sav 的文件,其中包含:

John

Steve

Crossroads

但是,当我运行程序时,savefile.sav 包含:

JohnSteveCrossroads

我做错了什么?

【问题讨论】:

  • 在 Python 中要记住的一些事情:readlines() 不会去除换行符,而 writelines() 不会附加换行符

标签: python python-3.x


【解决方案1】:

writelines 期望每个字符串都以换行符结尾。所以你需要:

file.writelines([sname + '\n', senemyname + '\n', scheckpoint + '\n'])

来自the python docs

writelines

将行列表写入流。不添加行分隔符,因此通常提供的每行末尾都有一个行分隔符。

但通常使用file.write('\n'.join([sname, senemyname, scheckpoint)) 更为惯用。请注意,这不会添加文件换行符。

您还应该对文件使用上下文,因为如果引发异常,您可能无法关闭文件:

with open('savefile.sav', 'w') as f:
    f.write('\n'.join([sname, senemyname, scheckpoint]))

【讨论】:

    【解决方案2】:

    writelines 不会在行之间添加分隔符,所以你必须自己添加:

    def saveall(sname, senemyname, scheckpoint,):
        file = open("savefile.sav", "w")
        file.writelines((line + '\n' for line in [sname, senemyname, scheckpoint]))
        file.close()
    
    saveall("John","Steve","Crossroads")
    

    文件内容:

    John 
    Steve 
    Crossroads
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多