2014-05-13 26 views
0

我正在編寫一個腳本來解析日誌中感興趣的行。除了印刷線條外,它運作良好。我有一個參數化的正則表達式,我在re.search中使用,它返回我的結果。我可以單獨打印它們或通過循環列表。將re.search打印爲CSV字符串的結果

我的問題是,對於每一場比賽,我想打印一個CSV行,基本上每個值在引號之間用逗號(並且在行尾沒有逗號)。是否有捷徑可尋?

我有這樣的:

if lineMatch: 
     for capturedToken in lineMatch.groups(): 
     #print capturedToken 

使用Python 2.7我怎麼會打印爲CSV行(後面跟一個新行)?

我試過打印/結束,但從我的理解是隻有Python 3.x - 我試過的每個變體都給了我語法錯誤。我確信有一種很酷的Pythonic方法可以將linematch組中的值作爲逗號分隔列表打印出來;我似乎無法找到它!

回答

1

我想你想要這樣的:

if lineMatch: 
    print(', '.join(['"{}"'.format(t) for t in lineMatch.groups()])) 

用法:

>>> m = re.search('(\d{4})-(\S+)', "1995-jun") 
>>> print ', '.join(['"{}"'.format(i) for i in m.groups()]) 
"1995", "jun" 
+0

很棒,太感謝你了,它就像魅力! – Chris

+0

只是爲了滿足我的好奇心,爲什麼在打印開始時的逗號和引號作爲分隔符在連接中?我喜歡這個結果,我只是好奇爲什麼在我的行首開始時沒有逗號,會不會改變''{}''到'「{}」,「達到相同的結果? – Chris

+0

@Chris''somestr'.join(iterable)'將'iterable'中的所有字符串連接在一起,使用'somestr'作爲每個元素之間的分隔符。因此,對於長度爲n的迭代器,它會創建'iterable [0] + somestr + iterable [1] + ... + somestr + iterable [n]'。所以你不會遇到'somestr'('','',你的情況)。給連接中的每個元素添加一個逗號(就像我對雙引號做的一樣),會爲最後一個元素添加尾隨逗號,而這(我認爲)不是您想要發生的事情。如果你確實需要這樣的話,你可以使用'''.join([''{}「,'。format(i)for my in m.groups()])''。 – dano

0

使用join方法從字符串這樣的:

print ",".join(lineMatch.groups()) 
相關問題