多行字符串解析

时间:2013-10-23 07:37:52

标签: python regex

我的字符串如下:

data = """
ID: ID/123456-00000003c
Value2: 1382386949.12
Value3: 00420903237127
Value4: 21

ID: ID/654431-0000000a
Value2: 1382386943.1032
Value3: 004989353474713
Value4: 33"""

每个变量都在单独的行中:

variable: value

我想创建一个函数来获取变量值的列表。像这样:

def get_values_of( variable_name ):
    code....
    return variable_list

如果我这样调用这个函数:

get_values_of(ID)

返回变量“ID”的值列表:

variables = ['ID/123456-00000003c', 'ID/654431-0000000a']

get_values_of(Value2)

它返回

variables = ['1382386949.12', '1382386943.1032']

请问,最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

data = """
ID: ID/123456-00000003c
Value2: 1382386949.12
Value3: 00420903237127
Value4: 21

ID: ID/654431-0000000a
Value2: 1382386943.1032
Value3: 004989353474713
Value4: 33"""

myData = {}
for line in data.split("\n"):
    if line:
        key, value = line.split(": ")
        myData.setdefault(key, [])
        myData[key].append(value)

def get_values_of(actualKey):
    return myData[actualKey]

print get_values_of("ID")
print get_values_of("Value2")
print get_values_of("Value3")
print get_values_of("Value4")

<强>输出

['ID/123456-00000003c', 'ID/654431-0000000a']
['1382386949.12', '1382386943.1032']
['00420903237127', '004989353474713']
['21', '33']

答案 1 :(得分:2)

此代码可以帮助您入门。

data = """
ID: ID/123456-00000003c
Value2: 1382386949.12
Value3: 00420903237127
Value4: 21

ID: ID/654431-0000000a
Value2: 1382386943.1032
Value3: 004989353474713
Value4: 33"""

for line in data.splitlines():
    if not line: # skips empty lines that would otherwise cause errors
        continue
    key, value = line.split(': ')
    print 'key: {}, value: {}'.format(key, value)

输出:

>>> 
key: ID, value: ID/123456-00000003c
key: Value2, value: 1382386949.12
key: Value3, value: 00420903237127
key: Value4, value: 21
key: ID, value: ID/654431-0000000a
key: Value2, value: 1382386943.1032
key: Value3, value: 004989353474713
key: Value4, value: 33

基本上,您正在遍历每一行,然后在:处拆分该行以获取密钥和值。您可以为每个段创建字典,也可以通过检查每次迭代的键来执行任何操作。你的选择。此代码旨在帮助指导您并为您提供正确的方向。


您想要的样本:

def get_vars(data, var):
    return [line.split(': ')[1] for line in data.splitlines() if line and line.startswith(var)]

>>>print get_vars(data, 'ID')
['ID/123456-00000003c', 'ID/654431-0000000a']