Python - 将循环输出写入文件

时间:2017-03-31 18:51:05

标签: python

我有一个输出IP列表的函数。

def convertHostNamesToIps(hostnames):
    ip = server.system.search.hostname(sessionKey, hostnames )
    for ips in ip:
        print (ips.get('ip'))

输出通常看起来像 以下是CSDP_LAB_STAGING的IP

172.29.219.123
172.29.225.5
172.29.240.174
172.29.225.46
172.29.240.171
172.29.240.175
172.29.219.119
172.29.219.117
172.29.219.33
172.29.219.35
.
.
.
172.29.219.40
172.29.219.35
172.29.219.40
172.29.219.118
172.29.219.121
172.29.219.115
172.29.225.51

现在我想将此输出写入文件。

我所做的是

def convertHostNamesToIps(hostnames):
    ip = server.system.search.hostname(sessionKey, hostnames )
    sys.stdout=open("test.txt","w")
    for ips in ip:
        print (ips.get('ip'))
    sys.stdout.close()

但是上面的代码只将最后一个IP写入test.txt。我以为我可能会搞砸那个缩进,但是那个怨恨帮助了我。还有其他我想念的东西吗?

P.S。这是我的第一个python脚本,请原谅我,如果我做了一些非常愚蠢的事情。

4 个答案:

答案 0 :(得分:0)

重新分配sys.stdout?那是......勇敢。

您可以将打开的文件分配给其他变量,然后调用其write方法。如果你想要分开的东西,你必须自己添加。

def convertHostNamesToIps(hostnames):
    ip = server.system.search.hostname(sessionKey, hostnames )
    my_file=open("test.txt","w")
    for ips in ip:
        my_file.write(ips.get('ip')+'\n')
    my_file.close()

答案 1 :(得分:0)

我甚至不知道最后的IP是如何保存的,因为你的函数中没有任何write。 你可以试试这个:

def convertHostNamesToIps(hostnames):
    ip = server.system.search.hostname(sessionKey, hostnames )
    list_ips = str ()
    for ips in ip:
    list_ips = list_ips + ips.get('ip') + '\n'

with open ('test.txt', 'w') as file:
    file.write (list_ips)

您需要file.write ()之类的东西来保存您的ips。我将所有的ips放在一个字符串中,以便它们更容易保存在文件中。 with块不需要任何close功能

编辑(我无法发表评论) 这两种方法的区别在于:

my_file = open ('test.txt', 'w')

my_file = open ('test.txt', 'a')

只是在第一个中,所有在之前执行函数调用的文件都将被删除。使用append,它不会,my_file.write(something_to_add)将被添加到文件的末尾。 但是,在'w'模式下打开将仅在执行此精确线时删除文件 我测试了自己,这适用于'w'以及'a'

答案 2 :(得分:0)

我经历了每个人的反应,并尝试了每一个。但是每个解决方案都只导致最后一个IP被打印到文件中。阅读documentation让我得出结论,我需要附加到文件而不是写入文件。

def convertHostNamesToIps(hostnames):
    ip = server.system.search.hostname(sessionKey, hostnames )
    my_file=open("test.txt","a")
    for ips in ip:
        my_file.write(ips.get('ip')+'\n')
    my_file.close() 

答案 3 :(得分:0)

def convertHostNamesToIps(hostnames):
ip = server.system.search.hostname(sessionKey, hostnames )
iplist = [] # Make a temporal list.
for ips in ip:
    print (ips.get('ip')) # This only print your ips, it isn't necesary.
    iplist.append(ips.get('ip')) # Add the current ip in the list.
with open("test.txt","w") as txt: # Open the file but when you finish to use the file it will automatically close.
    txt.writelines(iplist)

我希望这会对你有所帮助。