Python 将变量内容写入文件时出现的问题

Python 将变量内容写入文件时出现的问题,python,Python,我试图获取一个域的SPF记录,这些域从一个文件中读取。当我试图获取SPF内容并将其写入一个文件时,代码会给出从输入文件中获取的最后一个域的结果 Example `Input_Domains.txt` blah.com box.com marketo.com 我得到的输出仅用于marketo.com #!/usr/bin/python import sys import socket import dns.resolver import re def getspf (domain):

我试图获取一个
域的
SPF记录
,这些域从一个文件中读取。当我试图获取SPF内容并将其写入一个文件时,代码会给出从输入文件中获取的最后一个域的结果

Example `Input_Domains.txt`

blah.com
box.com
marketo.com
我得到的输出仅用于
marketo.com

#!/usr/bin/python

import sys
import socket
import dns.resolver
import re


def getspf (domain):
   answers = dns.resolver.query(domain, 'TXT')
   for rdata in answers:
     for txt_string in rdata.strings:
       if txt_string.startswith('v=spf1'):
         return txt_string.replace('v=spf1','')

with open('Input_Domains.txt','r') as f:
     for line in f:
        full_spf=getspf(line.strip())
my_file=open("out_spf.txt","w")
my_file.write(full_spf)
my_file.close()

我怎样才能解决这个问题,写下所有的spf内容的领域,我得到了它的文件,请任何建议

这是因为您一直在重写
full\u spf
,所以只存储最后一个值

with open('Input_Domains.txt','r') as f:
    for line in f:
        full_spf=getspf(line.strip())
修改:

with open('Input_Domains.txt','r') as f:
    full_spf=""
    for line in f:
        full_spf+=getspf(line.strip())+"\n"

这是因为您一直在重写
full\u spf
,所以只存储最后一个值

with open('Input_Domains.txt','r') as f:
    for line in f:
        full_spf=getspf(line.strip())
修改:

with open('Input_Domains.txt','r') as f:
    full_spf=""
    for line in f:
        full_spf+=getspf(line.strip())+"\n"
尝试在
with
块内部使用,而不是常规的
for
循环:

full_spf = '\n'.join(getspf(line.strip()) for line in f)
这将一次获取所有行,对它们执行自定义
getspf
操作,然后在它们之间添加新行

这样做的好处是,从概念上讲,您正在对数据进行单个转换。获取一个数据块并逐行处理它并没有本质上的“循环”,因为它可以以任何顺序进行,所有的行都是独立的。通过使用生成器表达式,可以将算法表示为单个转换和赋值操作

编辑:小疏忽,因为
join
需要一个字符串列表,所以每次都必须从
getspf
函数返回至少一个空字符串,而不是在不返回任何内容时默认为
None

尝试在
with
块中使用,而不是常规的
for
循环:

full_spf = '\n'.join(getspf(line.strip()) for line in f)
这将一次获取所有行,对它们执行自定义
getspf
操作,然后在它们之间添加新行

这样做的好处是,从概念上讲,您正在对数据进行单个转换。获取一个数据块并逐行处理它并没有本质上的“循环”,因为它可以以任何顺序进行,所有的行都是独立的。通过使用生成器表达式,可以将算法表示为单个转换和赋值操作


编辑:小疏忽,因为
join
需要一个字符串列表,所以每次都必须从
getspf
函数返回至少一个空字符串,而不是在不返回任何内容时默认为
None

您只执行一次写入,除了最后一个条目,您希望如何获取其他内容?您只执行了一次写入,您希望如何获取除了最后一个条目以外的其他内容?