2013-06-11 5 views
-1

파일을 구문 분석해야합니다. 코드가 나를 위해 작동하지 않습니다. 파일의 값은 다음과 같습니다.파일에서 키 값 쌍을 구문 분석하여 읽으십시오.

num=123-456-7890&kv1=1&kv2=12&kv3=0 
num=123-456-7890&kv4=1&kv2=12&kv3=0 
num=123-456-7890&kv1=10&kv2=12&kv3=0 



crs = open("file.txt", "r") 
keys = {k: v for k, v in [i.split('=') for i in crs.read().split('&')]} 

print keys 

result = {} 
for key, value in [s.strip for s in keys.items()]: 
    if key == 'kv1': 
     result[key] = int(value) 

print result 

고마워요.

답변

0

은 편집 :

from collections import defaultdict 

res = defaultdict(int) 
for line in crs: 
    data = {k: v for k, v in (i.split('=') for i in line.split('&'))} 
    for key in ['kv1', 'kv2']: 
     res[key] += int(data.get(key, 0)) 

이제 res 포함 : 만 KV1의 값의 합 kv2는 키의 존재 여부를 확인하지 않도록

사용하십시오 defaultdict을 필요

defaultdict(<class 'int'>, {'kv2': 36, 'kv1': 11}) 

일반 주소와 같은 액세스 :

>>> res['kv1'] 
11 
>>> res['kv2'] 
36 

이전 솔루션

당신은 한 줄이 작업을 수행 할 수 있습니다

: 만 'kv1' 필요한 경우

>>> [{k: v.strip() for k, v in [i.split('=') for i in line.split('&')]} 
    for line in crs] 
[{'kv1': '1', 'kv2': '12', 'kv3': '0', 'num': '123-456-7890'}, 
{'kv2': '12', 'kv3': '0', 'kv4': '1', 'num': '123-456-7890'}, 
{'kv1': '10', 'kv2': '12', 'kv3': '0', 'num': '123-456-7890'}] 

, 당신은 직접 필터링 할 수 있습니다 :

>>> [{k: int(v) for k, v in [i.split('=') for i in line.split('&')] 
    if k == 'kv1'} for line in crs] 
[{'kv1': 1}, {}, {'kv1': 10}] 
+0

값을 집계 것인가, 내가, NUM, KV1 및 kv2 – Newbie

+0

의 총 업데이트 내 솔루션 다음 값을 인쇄해야 더 나은 최적화 할 수 있습니다 확신합니다. 나는 당신이 그 합계를 찾고 있음을 당신의 질문에서 발견 할 수 없었다. 아무 곳에도'+ '또는'sum'이 없습니다. –

+0

솔루션을 게시 주셔서 감사합니다. – Newbie

0

이것은 내가 갖고 싶은 것입니다. 나는

crs = open('file.txt','r') 
result={} 
k1 = 0 
k2 = 0 
for line in crs.read().strip().split('\n'): 
    for pair in line.split('&'): 
     (key,value) = pair.split('=') 
     if key in ('kv1','kv2'): 
      if key == 'kv1': 
       k1 += int(value) 
       result[key] = int(k1) 
      else: 
       k2 += int(value) 
       result[key] = int(k2) 
     else: 
      result[key] = value 

print result['num']+'&'+'kv1='+str(result['kv1'])+'&'+'kv2='+str(result['kv2']) 
관련 문제