给出一些代码:
keyword=re.findall(r'ke\w+ = \S+',s)
score=re.findall(r'sc\w+ = \S+',s)
print '%s,%s' %(keyword,score)
上述代码的输出为:
['keyword = NORTH','keyword = GUESS','keyword = DRESSES','keyword = RALPH','keyword = MATERIAL'],['得分= 88466','得分= 83965','得分= 79379','得分= 74897','得分= 68168']
但我希望格式应该是不同的行:
NORTH,88466
GUESS,83935
DRESSES,83935
RALPH,73379
MATERIAL,68168
答案 0 :(得分: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)
答案 1 :(得分: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
答案 2 :(得分:0)
希望这会有所帮助:
keyword = ['NORTH','GUESS','DERESSES','RALPH']
score = [88466,83935,83935,73379]
for key,value in zip(keyword,score):
print "%s,%s" %(key,value)