Python - 仅最后一行被保存到文件

2 投票
4 回答
11712 浏览
提问于 2025-04-18 15:53

我想把我的脚本结果输出到一个文本文件里。脚本运行得很好,唯一的问题是,当结果保存到文本文件(output.txt)时,只有最后一行被保存,而不是全部内容。我不太确定我哪里做错了。有什么建议吗?

谢谢!

        try:

            if 'notavailable' not in requests.get('url' + str(service) + '&username=' + str(username), headers={'X-Requested-With': 'XMLHttpRequest'}).text:
                result = service + '\t' + " > " + username + " > " 'Available'
                print  result
                f = open("output.txt", "w")              
                f.write(result + "\n")
                f.close()

            else:
                print service + '\t' + " > " + username + " > " 'Not Available'

        except Exception as e:
            print e

4 个回答

-1

你有没有试过用参数'a'呢?

这样写:

f = open("output.txt", "a")

这行代码会把文件打开,并且光标会在文件的最后面。

想了解更多,可以看看这个链接:http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python

0

我猜这段代码是在一个循环里执行的。每次循环的时候,你都会写一行新的代码,但最后你只会得到最后那一行。

如果真是这样,那问题就出在这里:

        f = open("output.txt", "w")              

当你用 'w' 模式打开一个文件时,这会把文件里原有的内容清空。

要解决这个问题,你可以选择在循环外面打开文件一次,而不是每次循环都打开,或者用 'a' 模式、'r+' 模式,或者其他不会清空文件的模式。

关于 open 函数的不同模式的详细说明,可以查看 官方文档,或者在交互式解释器里查看帮助。

4

在每次循环中,你都在打开文件、清空内容、写入新内容,然后再关闭文件。其实只打开一次文件会更好:

f = open('output.txt', 'w')
# do loop
    f.write(stuff)
f.close()

或者,甚至可以更好:

with open('output.txt', 'w') as f:
    while loop:
       f.write(stuff)

这种方法不仅更简洁,而且效率更高,因为你可以把文件的内容暂时存储起来,减少与操作系统的交互次数。

5

你需要写

f = open("output.txt", "a")

这样做会在文件末尾添加内容,而不是覆盖你之前放进去的东西。

撰写回答