2011-11-27 101 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)