我试图获取一个SPF records
的domains
,域是从一个文件中读取的。当我试图获取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内容的领域,我得到它的文件,有什么建议请
尝试在
with
块中使用a generator expression,而不是常规的for
循环:这将一次获取所有行,对它们执行自定义的
getspf
操作,然后在它们之间添加新行这样做的好处是,从概念上讲,您只需对数据进行一次转换。获取一个数据块并逐行处理它本身并没有什么“循环”,因为它可以按任何顺序进行,所有的行都是独立的。通过使用生成器表达式,您可以将算法表示为单个转换和赋值操作
编辑:很小的疏忽,因为
join
需要一个字符串列表,所以每次都必须从getspf
函数返回至少一个空字符串,而不是在不返回任何内容时默认为None
这是因为您一直在重写
full_spf
,所以只存储最后一个值修改:
相关问题 更多 >
编程相关推荐