2013-08-10 1 views
0

입력 파일을 병합 I는 상기 제 1 및 제 2 칼럼으로 일치 병합 할파이썬 데이터 매칭을 수행하고

a A e f m 
b B g h 
c C i j 
b B k l 

가지는 탭 구분 유니 TXT되는. 그래서 내가하고 싶어

a A e f m 
b B g h  k l 
c C i j 

코드는 입력의 최대 열 수를 감지해야한다. 이 예제에서는 5이므로 "k l"은 6 번째 칸부터 넣었습니다.

실제로 숫자가 모두 같으면 Matlab을 사용하여 거의 처리했습니다. 하지만 글자 그대로 Matlab은 유니 코드를 다루는데 너무 나빴습니다. Matlab에서 유니 코드를 다루는 방법에 대해 stackoverflow를 읽었습니다. 그래서 저는 이제 파이썬으로 변했습니다.

엑셀 VBA로

, 그것을 행할 듯하지만 데이터 크기가 그래서 파이썬 엑셀 VBA보다 더 빨리 될 것 짐작 너무 거대하기 때문에 (내가 제대로 추측 있습니까?)

+0

이것은 awk에서 정말 쉽습니다. awk -F \ t '{a = $ 1 "\ t"$ 2; $ 1 = $ 2 = ""; – SheetJS

+0

@Nirk stackoverflow의 지침에 따라 답변을 코멘트로 게시해서는 안됩니다이 http : //를 참조하십시오. [x] [x] [y] /stackoverflow.com/help/privileges/comment. –

+1

@MadanRam 질문이 파이썬과 관련되어 있고 파이썬 답변을 제공하지 않은 한 답변이 아닙니다. user2604484가 awk가 받아 들일 수있는 해결책이라고 결정하지 않는 한 가장 좋은 코멘트입니다. – SheetJS

답변

0

개인적으로의 입력/처리 로직을 분리하는 것 출력/포맷팅 로직.

def match_merge(filename): 
    with open(filename) as f: 
     c = csv.reader(f,delimiter='\t') 
     d = defaultdict(list) 
     for line in c: 
      d[(line[0],line[1])].append(line[2:]) 
    return d 

데모 : 당신은 dict (defaultdict 실제로) 그 match_merge 반환을 쉽게 탭 DELIM 파일에 그를 쓸 수

In [17]: import pprint 

In [18]: pprint.pprint(match_merge('tabdelim')) 
{('a', 'A'): [['e', 'f', 'm']], 
('b', 'B'): [['g', 'h'], ['k', 'l']], 
('c', 'C'): [['i', 'j']]} 

. 출력 수요를 제대로 이해하지 못했기 때문에 그 부분을 생략했습니다.

관련 문제