2015-08-17 76 views
0

我試圖獲得的SPF records,並從域中讀取文件。當我試圖獲取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,有什麼建議嗎?

+0

您只執行一次寫入,您希望如何獲得除最後一項之外的任何內容? –

回答

3

這是因爲你重寫full_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" 
2

嘗試使用a generator expressionwith塊內,而不是常規的for loop:

full_spf = '\n'.join(getspf(line.strip()) for line in f) 

這將一次抓取所有的行,對您的自定義getspf操作,然後用它們之間的換行符連接它們。

這樣做的好處是,從概念上講,您正在對數據進行單一轉換。關於獲取數據塊並逐行處理數據,本質上並沒有什麼「循環」,因爲它可以按任何順序完成,所有行都是獨立的。通過使用生成器表達式進行操作,可以將您的算法表示爲單個轉換和分配操作。

編輯:小疏忽,因爲join需要字符串列表,你必須從你的getspf功能在任何情況下至少返回一個空字符串,而不是默認爲None,當你不返回任何東西。