[英]Print in single line in 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','關鍵字= RALPH','關鍵字=材料'],['得分= 88466','得分= 83965','得分= 79379' ,“得分= 74897”,“得分= 68168”]
但我希望格式應為不同的行,例如:
NORTH,88466
GUESS,83935
DRESSES,83935
RALPH,73379
MATERIAL,68168
代替最后一行,而是這樣做:
>>> 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
下面是它的工作原理:
另外,您可以通過使用組來捕獲關鍵字和分數而不用周圍的文本來修改正則表達式來為您完成很多工作:
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)
一種方法是將兩個列表一起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
希望這會有所幫助:
keyword = ['NORTH','GUESS','DERESSES','RALPH']
score = [88466,83935,83935,73379]
for key,value in zip(keyword,score):
print "%s,%s" %(key,value)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.