python解析并从行获取更多输入

时间:2014-07-06 08:01:26

标签: python

我需要解析一个文本文件并获取输出并将它们添加到列表中。

    with open(qwer.txt, 'r') as my_file:
        a = my_file.readlines()
        for line in a:
            for part in line.split():
                if "color=" in part:
                    p1 = part.split('=')[1] 
                    print(p1)
                    list1 = []  
                    p1.append(list1)

所以,我有一条线,我有两个/更多" color ="在同一条线上,我需要输出来获得两种颜色:

  

我的颜色=红色,我的颜色=绿色

我想要的输出是:

red
green

我需要将它们分别添加到列表中[' red',' green']。请帮忙!答案将不胜感激。

4 个答案:

答案 0 :(得分:5)

您当然可以使用正则表达式:

import re
str = "my color=red and my color=green"
p = r'color=([a-z]+)'
x = re.findall(p, str)

答案 1 :(得分:3)

您的解决方案几乎正确,您打印正确的线条。以下是将它们保存到列表的方法:

result = []
with open('qwer.txt') as my_file:
    for line in my_file:
        for part in line.strip().split():
            if "color=" in part:
                p1 = part.split('=')[1] 
                result.append(p1)

如果您需要列表列表,请执行以下操作:

result = []
with open('qwer.txt') as my_file:
    for line in my_file:
        values = []
        for part in line.strip().split():
            if "color=" in part:
                p1 = part.split('=')[1] 
                values.append(p1)
        if values:
            result.append(values)

答案 2 :(得分:2)

也许你可以在没有正则表达式的情况下做到这一点:

parts = itertools.chain.from_iterable(line.split() for line in my_file)
colors = [part.split('color=')[1] for part in parts if part.startswith('color=')]

虽然正则表达式似乎最适合这里。

答案 3 :(得分:1)

我们最有可能避免使用群组。你可以通过lookbehind获得颜色的值,

>>> import re
>>> str = 'my color=red and my color=green'
>>> m = re.findall('(?<=color=)\S+', str)
>>> m
['red', 'green']