2014-06-20 3 views
1

두 개의 다른 파일이 있습니다.두 개의 텍스트 파일을 파이썬에서 공통 값으로 병합하는 방법

하나의 파일로 병합해야합니다. 공통의 가치가 있습니다. 두 파일은이 형식을가집니다. 경기는 순서대로 진행되지 않습니다. Dataset1 line1은 dataset2 line1과 일치하지 않을 수 있습니다. dataset1 line1이 dataset2 line16 또는 line45와 일치 할 확률이 높습니다.

굵게는 일치하는 값입니다. 어떤 방향 도움을 주시면 감사하겠습니다.

 
BEEC,BE-EC,,154.7,46.07,,31.63,54.6,4833.6,5.06 
BPLZ,BE-LZ,,390.6,62.62,,49.0,145.0,27.3,61.52 
BFLP,BF-OP,,180.1,34.89,,40.0,58.26,8533.8,7.31 


MRM1234-BEEC-1635753E001  25.6 70.29 
MRM1234-BPLZ-1814737E003  8.12 18.13 
MRM1234-BFLP-2470883E001  12.92 18.8 


나는 각 요소의 배열을 얻을 수있는 line.split를 사용하는 방법을 알고있다.

두 번째 데이터 집합의 첫 번째 열 L[6:4]을 계산하는 방법을 알고 있으며 일치하는 4 자 값을 얻습니다.

여러 가지 방법을 시도했지만 성공하지 못했습니다.

고유 한 4 자리 식별자로 연결된 한 행의 모든 ​​열을 병합하려면 어떻게해야합니까? 독창적 인 가치를 매치하고 한 줄에 글을 쓰면 나를 벗어날 수 있습니다. 파일 dat1

+1

의 내용이다. –

+0

BFLP, BF-OP, 180.1,34.89, 40.0,58.26,8533.8,7.31,12.92,18.8 - 사전이 필요하다는 것을 알지만 작동시킬 수는 없습니다. 보시다시피 최종 결과는 첫 번째 세트와 일치하는 두 번째 데이터 세트의 두 숫자 값이며 csv – Seth

답변

2

내용 : 파일 dat2

BEEC,BE-EC,,154.7,46.07,,31.63,54.6,4833.6,5.06 
BPLZ,BE-LZ,,390.6,62.62,,49.0,145.0,27.3,61.52 
BFLP,BF-OP,,180.1,34.89,,40.0,58.26,8533.8,7.31 

내용 : 설명처럼

MRM1234-BEEC-1635753E001  25.6 70.29 
MRM1234-BPLZ-1814737E003  8.12 18.13 
MRM1234-BFLP-2470883E001  12.92 18.8 

사용이 빠른 & 더러운 스크립트는 두 파일의 라인을 연결합니다.

dat1 = {} 
with open('dat1') as f: 
    for line in f.readlines(): 
     dat1[line.split(',')[0]] = line.strip().split(',')[1:] 

dat2 = {} 
with open('dat2') as f: 
    for line in f.readlines(): 
     key = line.strip().split()[0].split('-')[1] 
     dat2[key] = line.strip().split()[1:] 

for key in dat1.keys(): 
    print("%s,%s,%s" % (key, str.join(',', dat1[key]), str.join(',', dat2[key]))) 

이렇게하면 다음과 같은 결과가 출력됩니다. 혼란에 대한

BFLP,BF-OP,,180.1,34.89,,40.0,58.26,8533.8,7.31,12.92,18.8 
BEEC,BE-EC,,154.7,46.07,,31.63,54.6,4833.6,5.06,25.6,70.29 
BPLZ,BE-LZ,,390.6,62.62,,49.0,145.0,27.3,61.52,8.12,18.13 
+0

으로 추가 된 경우 키 오류가 발생합니다. 시도하고 단순화하기 위해 SiteCode가 두 파일의 첫 번째 필드가되도록 작업을 다시 작성했습니다. 스크립트를 수정하여 .split ('-') 작업을 제거하고 dat1에 대한 dat1 섹션을 재사용했습니다 (이름이 변경됨). 그것은 여전히 ​​나에게 오류를 준다. 나는 dat1과 dat1을 출력했고 그것은 많은 데이터를 가지고있다. 나는 아직 그것을 완전히 이해하지는 못하고 있지만 그것에 대해 연구하고있다. 파일에 빈 값이 없는지 확인했습니다. – Seth

+0

솔루션이 작동합니다. MY 데이터 파일 (공급 업체가 내게 이메일로 전송)은 몇 개의 중복 ID를 사용합니다. 고맙습니다. 프로그래밍을 도와주고 한 번에 모든 공급 업체 오류를 보여주었습니다. – Seth

+0

흠 하나 자세히. dat1에 존재하지 않는 사이트 코드가 있으면 실패합니다. 드문 일이지만 가능합니다. 나는 그것을 확인해야 할 것이다. – Seth

0

죄송합니다 ...

def parse(d1, d2): 
    d1 = d1.split('\n') 
    data1 = [x.split(',') for x in d1 if x] 
    d2 = d2.split('\n') 
    data2 = [x.split(' ') for x in d2 if x] 
    target = [] 
    for x in data2: 
     d = [y for y in x if y] 
     dd = d[0].split('-') 
     dd.extend(d[1:]) 
     target.append(dd) 
    ret = [] 
    while data1: 
     x = data1.pop() 
     for y in target: 
      if x[0] == y[1]: 
       z = x 
       z.extend(y[-2:]) 
       ret.append(z) 
    for x in ret: 
     print(x) 


parse(data1, data2) 

데이터 1, 데이터 2는 병합 된 라인의 예를 적어주세요 수있는 파일

관련 문제