簡體   English   中英

在Python中單行打印

[英]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

下面是它的工作原理:

  • 拉鏈將相應的元素成對放置。

  • 分區'keyword = NORTH'類的字符串分為三部分(等號之前的部分,等號本身和之后的部分。 [2]僅保留后一部分。

  • 該條帶刪除前導和尾隨空格。

另外,您可以通過使用組來捕獲關鍵字和分數而不用周圍的文本來修改正則表達式來為您完成很多工作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM