2011-11-27 115 views
0

單線鑑於一些代碼:打印在在Python

keyword=re.findall(r'ke\w+ = \S+',s) 
score=re.findall(r'sc\w+ = \S+',s) 
print '%s,%s' %(keyword,score) 

的上面的代碼的輸出是:

[ '關鍵字= NORTH', '關鍵字= GUESS',「關鍵字= DRESSES ','keyword = RALPH','keyword = MATERIAL'],['score = 88466','score = 83965','score = 79379','score = 74897','score = 68168']

但我想格式應該是不同的行:

NORTH,88466 
GUESS,83935 
DRESSES,83935 
RALPH,73379 
MATERIAL,68168 

回答

8

相反的最後一行,而是執行此操作:

>>> for k, s in zip(keyword, score): 
     kw = k.partition('=')[2].strip() 
     sc = s.partition('=')[2].strip() 
     print '%s,%s' % (kw, sc) 


NORTH,88466 
GUESS,83965 
DRESSES,79379 
RALPH,74897 
MATERIAL,68168 

這裏是它如何工作的:

  • zip帶來了相應的元素一起配對。

  • partition分割的字符串等'keyword = NORTH'分爲三個部分(等號之前的部分,等號本身,和之後的部分。該[2]保持只有後者的一部分。

  • strip移除前導和結尾的空白

或者,您可以修改您的正則表達式通過使用組捕獲的關鍵字和分值沒有周圍的文字做很多你的工作。

keywords = re.findall(r'ke\w+ = (\S+)',s) 
scores = re.findall(r'sc\w+ = (\S+)',s) 
for keyword, score in zip(keywords, scores): 
    print '%s,%s' %(keyword,score) 
+2

不錯。如果你在''=''分區()'上使用'strip()':-) – Johnsyweb

+0

如果我在這裏使用split()而不是partition(),除了沒有結果中的分隔符? – Kos

+2

對於您的特定數據,沒有。在分隔符可能缺失或出現多次的情況下,'partition'通常更容易處理,因爲您總是會得到一個3項列表,其中'split'可能會拋出異常或給您多個項目。 –

0

一種方式是像將zip()兩個列表一起(遍歷它們配對),並使用str.partition()=後獲取數據,這樣的:

def after_equals(s): 
    return s.partition(' = ')[-1] 

for k,s in zip(keyword, score): 
    print after_equals(k) + ',' + after_equals(s) 

如果您不想叫after_equals()兩次,你可以重構爲:

for pair in zip(keyword, score): 
    print ','.join(after_equals(data) for data in pair) 

如果你想寫入一個文本文件(你真的應該有提本編的問題,而不是在對我的回答您的意見),那麼你可以採取這種方法...

with open('output.txt', 'w+') as output: 
    for pair in zip(keyword, score): 
     output.write(','.join(after_equals(data) for data in pair) + '\n') 

輸出:

% cat output.txt 
NORTH,88466 
GUESS,83965 
DRESSES,79379 
RALPH,74897 
MATERIAL,68168 
+0

如何寫輸出到一個文件,FILE.writelines','。join(after_equals(data)對數據) – newcane

+0

任何人都請幫忙,我想輸出寫入一個格式相同的文件 – newcane

+0

@Ryder:如果你沒有得到你想要的答案,請更新你的問題,而不是給任意答案添加評論。我還建議閱讀http://tinyurl.com/so-hints,以幫助您獲得更好的答案。 – Johnsyweb

0

希望這將幫助:

keyword = ['NORTH','GUESS','DERESSES','RALPH'] 
score = [88466,83935,83935,73379] 

for key,value in zip(keyword,score): 
    print "%s,%s" %(key,value)