代码之家  ›  专栏  ›  技术社区  ›  SkyeBoniwell

为什么我的脚本没有将所有结果打印到文件中?

  •  0
  • SkyeBoniwell  · 技术社区  · 11 月前

    我有下面的简单代码,它在数据帧中循环,并将结果打印到屏幕和文件中。

    然而,我的问题是,它将所有数据完美地打印到屏幕上,但文件只得到数据的最后一端。

    这是我的代码:

    for star in Constellation_data(starDf.values.tolist()):
        print(star)
        sourceFile = open('stars.txt', 'w')
        print(star, file = sourceFile)
        sourceFile.close()
    

    谢谢

    1 回复  |  直到 11 月前
        1
  •  2
  •   tdelaney    11 月前

    “w”会删除现有文件,因此对于循环的每次迭代,都会删除以前编写的任何内容。处理此问题的正常方法是在循环之前打开文件一次

    with open('stars.txt', 'w') as sourceFile:
        for star in Constellation_data(starDf.values.tolist()):
            print(star)
            print(star, file = sourceFile)
    

    请注意 with 子句-完成后将自动关闭文件。

    如果您想在每次写入时关闭文件是有原因的(也许另一个文件正在读取它,或者您想更频繁地保存状态),那么您可以使用附加模式。我添加了代码来删除旧文件,然后在每个循环上追加。第一个追加将创建文件。

    if os.path.exists('stars.txt'):
        os.remove('stars.txt')
    for star in Constellation_data(starDf.values.tolist()):
        with open('stars.txt', 'a') as sourceFile:
            print(star)
            print(star, file = sourceFile)