2013-07-15 165 views
2

我想在打印這個列表時刪除註釋。解析python中的字符串列表

我使用

output = self.cluster.execCmdVerify('cat /opt/tpd/node_test/unit_test_list') 
for item in output: 
    print item 

這是完美的給我整個文件,但我怎麼會在打印時刪除評論?

我必須使用cat來獲取文件,因爲它位於何處。

回答

2

功能self.cluster.execCmdVerify顯然返回iterable,所以你可以簡單地這樣做:

import re 

def remove_comments(line): 
    """Return empty string if line begins with #.""" 
    return re.sub(re.compile("#.*?\n") ,"" ,line) 
    return line 

data = self.cluster.execCmdVerify('cat /opt/tpd/node_test/unit_test_list') 

for line in data: 
    print remove_comments(line) 

下面的例子是一個字符串輸出:

要靈活,你可以創建一個文件對象的字符串(只要它是一個字符串)

from cStringIO import StringIO 
import re 

def remove_comments(line): 
    """Return empty string if line begins with #.""" 
    return re.sub(re.compile("#.*?\n") ,"" ,line) 
    return line 

data = self.cluster.execCmdVerify('cat /opt/tpd/node_test/unit_test_list') 
data_file = StringIO(data) 

while True: 
    line = data_file.read() 
    print remove_comments(line) 
    if len(line) == 0: 
     break 

或者只是使用在for-loop

+0

由於我們的測試框架,我們的系統與多個節點聚集在一起,所以這種方式並不能很好地工作,所以我無法登陸Python中的正確節點。 –

+0

好吧,我編輯了處理輸出文件的代碼。 – tamasgal

+0

我用這個買了我得到了這個: –

2

您可以使用正則表達式re模塊來識別註釋,然後刪除它們或在腳本中忽略它們。

0

什麼greping

grep -v '#' /opt/tpd/node_test/unit_test_list 
0

如果它是例如Python文件和要刪除#開始的行輸出,你可以嘗試:

cat yourfile | grep -v '#' 

編輯:

如果你不需要貓,你可以直接做:

grep -v "#" yourfile 
+0

它只適用於位於服務器上的文本文件。 –

+0

爲什麼在直接使用grep時使用cat ?,我猜Alan什麼時候說他需要使用cat,他意味着他不能直接使用python打開文件,但是可以使用其他命令 –

+0

這是正確的,我可以使用其他命令來執行此操作嗎? –