2012-12-05 23 views
1

我有要求使用某些服務器的IP和主機名來創建重複的配置文件。這些數據包含在一個類似於模擬數據的大型列表中;將文件數據從函數導入列表

192.168.0.1 - data info hosta 
192.168.0.2 - data info hostb 
192.168.0.3 - data info hostc 
192.168.0.4 - data info hostb 

該數據包含我不想任意信息,如下列項目,「

- data info ' 

我有,我可以讀取數據分割成一個列表的想法。 然後,我將能夠遍歷列表,僅指定要顯示的列表中每個編號的元素,只留下;

192.168.0.1 
192.168.0.2 
... 

然後這將被放置到一個僅包含IP地址的新列表中。

我創建了一個會讀取文件到列表

def importlines(): 
    mf = open('C:\\scripts\\nagios\\filename.txt','r') 
    lines = mf.read().split() 
    print(lines) 
mf.close() 

#the data is read in correctly 
#I then attempted to create a blank list 
hosts = [] 

#then append the output from the function call to the list 
hosts.append(importlines()) 

然而這會導致「無」,如果我執行hosts.append(importlines())再次,我遇到了一個功能無,無。所以它似乎是在列表中追加一個不包含任何東西的元素。我試過執行hosts.append(print(importlines()))但是我有同樣的問題。

正如你可以告訴我你可能會描述爲一個偶然的系統管理員並且沒有這方面的經驗。我也意識到這個問題會創建一個大列表,在我的腦海中,我相信我需要一個包含每行的列表的列表。我在這裏留下了什麼?

感謝,

回答

1

要拆分整個文件,而不是每一行。此外,您的功能只有打印,它實際上並沒有使用return將結果返回給調用者。

def importlines(): 
    with open('C:/scripts/nagios/filename.txt') as mf: 
     return [l.split()[0] for l in mf] 

將返回只有 IP地址的列表。您可以直接結果分配給hosts

hosts = importlines() 

你自己的代碼並沒有importlines()返回任何東西,和一個Python函數的默認返回值是None

+0

這很有道理。謝謝。 –

-1

你必須從函數中返回一些東西。 print()語句不返回任何內容。 嘗試類似這樣:

 
def importlines(): 
    toRet = [] 
    mf = open('C:\\scripts\\nagios\\filename.txt','r') 
    lines = mf.read().split() 
    for line in lines: 
     toRet.append(line[0]) 
    return toRet 
+0

'.split()'在* all *空白處分割,所以'lines'將是'['192.168.0.1',' - ','data','info','hosta','192.168。 0.2',' - ','data','info','hosta',...]'值。你的函數會返回'['1',' - ','d','i','h','1',' - ','d',...]',即每個字符的第一個字符文件中的非空白字符序列。 –