2013-10-23 159 views
1

我有串象下面這樣:多行字符串解析

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) 

it return

variables = ['1382386949.12', '1382386943.1032'] 

請問,這樣做的最好方法是什麼?

+0

您可以分割的字符串。 – aIKid

回答

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'] 
+0

你也可以在這裏使用'defaultdict'。 – georg

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'] 
+0

像往常一樣優秀的答案。如果我可以添加一個小東西,請解釋'不是線條',因爲很多人不知道你實際上可以用空字符串做什麼。 –

+0

@GamesBrainiac注意和完成。 –