2017-11-06 1 views
-1

두 개의 텍스트 파일을 병합하고 파이썬을 사용하여 파일에 새 값을 추가하려고합니다. 나는 은 File2.txtfile2.txt을했습니다 - 나는 파일 file2.txt에서 새로운 가치를 가지고 은 File2.txt에 추가하고 싶습니다. file1.txt에 동일한 키가 있으면 기존 값과 함께 새 값을 추가하거나 새 항목을 만듭니다.두 개의 텍스트 파일을 병합하고 파이썬에서 새 값을 추가하는 방법

이 예에서는 file2.txt에 itemNumber1 및 itemNumber2 키가 있습니다. 이 키는 file1.txt에 이미 존재하므로 새로운 값 (file2.tx)을 기존 값에 추가해야합니다. 덮어 써서는 안됩니다. itemNumber5와 같은 새 키가 있으면 아래 output.txt와 같은 새 항목을 추가하기 만하면됩니다.

이 작업을 수행하는 우아한 방법은 무엇입니까? 어떤 도움이라도 대단히 감사 할 것입니다.

미리 도움을 주셔서 감사합니다.

은 File2.txt

ABC itemNumber1 itemName1,itemModel1,itemPrice1,itemSoldby1|itemName11,itemModel11,itemPrice11,itemSoldby11|itemName12,itemModel12,itemPrice12,itemSoldby12| 
ABC itemNumber2 itemName2,itemModel2,itemPrice2,itemSoldby2|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13| 
ABC itemNumber3 itemName3,itemModel3,itemPrice3,itemSoldby3|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14| 

file2.txt

ABC itemNumber1 itemName13,itemModel13,itemPrice13,itemSoldby13 
ABC itemNumber2 itemName14,itemModel14,itemPrice14,itemSoldby14 
ABC itemNumber5 itemName5,itemModel5,itemPrice5,itemSoldby5 

ABC itemNumber1 itemName1,itemModel1,itemPrice1,itemSoldby1|itemName11,itemModel11,itemPrice11,itemSoldby11|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13| 
ABC itemNumber2 itemName2,itemModel2,itemPrice2,itemSoldby2|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14| 
ABC itemNumber3 itemName3,itemModel3,itemPrice3,itemSoldby3|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14| 
ABC itemNumber5 itemName5,itemModel5,itemPrice5,itemSoldby5| 
+0

이것은 상당히 광범위한 질문입니다. 구체적으로 어떤 단계를 구체적으로 설명 할 수 있습니까? – glibdud

+1

지금까지 해보신 것은 무엇입니까? – yinnonsanders

+0

'itemNumber' 만 일치시키고 싶습니까? 'itemNumber'가 동일하다면 거기에 새로운 값을 추가 하시겠습니까? –

답변

1

OUTPUT.TXT은의 y로 만들기 시작하자 우리의 파일 : 실제 코드에 이제

with open("file1.txt", "w") as f: 
    f.write("""itemNumber1 itemName1,itemModel1,itemPrice1,itemSoldby1|itemName11,itemModel11,itemPrice11,itemSoldby11|itemName12,itemModel12,itemPrice12,itemSoldby12| 
itemNumber2 itemName2,itemModel2,itemPrice2,itemSoldby2|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13| 
itemNumber3 itemName3,itemModel3,itemPrice3,itemSoldby3|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14|""") 

with open("file2.txt", "w") as f: 
    f.write("""itemNumber1 itemName13,itemModel13,itemPrice13,itemSoldby13 
itemNumber2 itemName14,itemModel14,itemPrice14,itemSoldby14 
itemNumber5 itemName5,itemModel5,itemPrice5,itemSoldby5""") 

:

import pandas as pd 

files = ["file1.txt","file2.txt"] 

# create dataframes 
dfs = (pd.read_csv(i,header=None,sep=" ",index_col=0) for i in files) 

# concat to one dataframe 
df = pd.concat(dfs) 

# groupby and sum 
df = df.groupby(df.index).apply(lambda x: x.sum()) 

# use this if you want to glue them with a string (e.g. |) 
# seeing your file.txt ends with | this is not necessary! 
# df = df.groupby(df.index)[1].apply(lambda x: '|'.join(x)).to_frame() 

# output 
df.to_csv("output.txt",header=None,sep=" ") 

출력 :

당신이 외부를 사용하지 않고 일부 지능형리스트를 사용하여 파이썬 방법을 시도 할 수 있습니다 원하는 경우
itemNumber1 itemName1,itemModel1,itemPrice1,itemSoldby1|itemName11,itemModel11,itemPrice11,itemSoldby11|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13 
itemNumber2 itemName2,itemModel2,itemPrice2,itemSoldby2|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14 
itemNumber3 itemName3,itemModel3,itemPrice3,itemSoldby3|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14| 
itemNumber5 itemName5,itemModel5,itemPrice5,itemSoldby5 
+0

고마워, 내 열쇠 전에 일부 값을 추가하려고하면 - 귀하의 코드가 깨고있다. 내 글을 업데이트했습니다. 50 백만 줄을 처리하면 성능에 영향을 미치게됩니다. –

0

lib :

with open('jappa.txt','r') as file_a, open('appa.txt','r') as file_b: 
    file_1=[item.split() for item in file_b] #storing file_1 content 
    file_2=[item.split() for item in file_a] #storing file_2 content 


for index,item in enumerate(file_1): 
    for index_1,item_1 in enumerate(file_2): 
     if item[0]==item_1[0]: #if If same key is exist 
      file_1[index].extend([item_1[1]]) #append new value with existing one 
      file_2.pop(index_1) 


[file_1.append(rest_of) for rest_of in file_2] 
[item.insert(1,' ') for item in file_1] 


with open('file_3kare.txt','w+') as file_c: #writing final result to file_3 
    for item in file_1: 
     file_c.write("".join(item)+"\n") 

은 file_3.txt에 출력 :

itemNumber1 itemName1,itemModel1,itemPrice1,itemSoldby1|itemName11,itemModel11,itemPrice11,itemSoldby11|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13 
itemNumber2 itemName2,itemModel2,itemPrice2,itemSoldby2|itemName12,itemModel12,itemPrice12,itemSoldby12|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14 
itemNumber3 itemName3,itemModel3,itemPrice3,itemSoldby3|itemName13,itemModel13,itemPrice13,itemSoldby13|itemName14,itemModel14,itemPrice14,itemSoldby14| 
itemNumber5 itemName5,itemModel5,itemPrice5,itemSoldby5 
+0

@Thanks Ayodhyankit. 하지만 내 열쇠 앞에 몇 가지 상수 값을 추가하려고하면 귀하의 코드 내가 깨는 –

관련 문제