2017-03-28 14 views
1

私は最初のコードを書いています(何かで始める必要があります:))私はインターネット上で私に何か似たような例が見つからないので、本当に苦労しています少なくとも取る方向。 私はそれを説明できるほど明確にしようとします。異なるファイルのセルに基づいてセルの値を更新

私は2つの.xlsxファイルを持っていますが、すべてが多くの地区を含んでいます。

FILE 1 - DATAS DEPENDING ON DISTRICT   FILE 2 - DISTRICT UNIQUE 
                 VALUES 
columnA+B columnC  columnE    columnA  columnE 
DATA  DEPARTMENT DISTRICT    DEPARTMENT  DISTRICT 

"   LIMA   BARRANCA    LIMA   BARRANCA 
"   LORETO  BARRANCA    LORETO   BARRANCA1 
"   LORETO  BARRANCA    SAN MARTIN  BARRANQUITA 
"   SAN MARTIN BARRANQUITA   LORETO   BELEN 
"   SAN MARTIN BARRANQUITA   CAJAMARCA  BELLAVISTA 
"   SAN MARTIN BARRANQUITA   PIURA   BELLAVISTA1 
"   LORETO  BELEN     SAN MARTIN  BELLAVISTA2 
"   SAN MARTIN BELLAVISTA 

ご覧のとおり、地区は同じ名前を持つことができますが、重複は異なる部門に属します。

columnA+B columnC  columnE    columnA  columnE 
DATA  DEPARTMENT DISTRICT    DEPARTMENT  DISTRICT 

"   LIMA   BARRANCA    LIMA   BARRANCA 
"   LORETO  BARRANCA1    LORETO   BARRANCA1 
"   LORETO  BARRANCA1    SAN MARTIN  BARRANQUITA 
"   SAN MARTIN BARRANQUITA   LORETO   BELEN 
"   SAN MARTIN BARRANQUITA   CAJAMARCA  BELLAVISTA 
"   SAN MARTIN BARRANQUITA   PIURA   BELLAVISTA1 
"   LORETO  BELEN     SAN MARTIN  BELLAVISTA2 
"   SAN MARTIN BELLAVISTA2 

任意の提案を私を助けることができるツールのために: 私の期待される結果は次のようにFILE 1を更新するのですか?私は単純なforループでコードを試しましたが、同じ時間に4列にする方法を理解することはできません。

wb1 = FILE1 
ws1 = worksheet1 
wb2 = FILE2 
ws2 = worksheet2 

x=1 
for distr1 in ws1['E']: 
    for i, j in itertools.product(range(1,ws2.max_row+1), range(1,ws1.max_row+1)): 
     distr2 = ws2.cell(row=i,column=5) 
     dept2 = ws2.cell(row=i, column=1) 
     dept1 = ws1.cell(row=j, column=3) 
     if distr2.value == str(distr1.value) + str(x) and dept2.value == dept1.value: 
      distr1.value = distr2.value 
     x +=1 
おそらく

ないこの世界で最高のコードが、私が言ったように、私の最初の1つの:)

+0

あなたがしようとしていることは本当に明確ではありません。あなたは単に2つのファイルをマージしようとしていますか? –

+0

いいえ、もう少し複雑です。地区の名前は重複していることがあります。そのため、FILE2では一意の値になっています。 FILE1ではそうではありませんが、ランダムな接尾辞を追加するだけではありません。添付されている部門に関して、FILE2と同じでなければなりません。それは少し明確になることを願っています。 – zobalette

答えて

0

質問は、非常に明確に特に値が保持されるべきではありません。私は、地区を部署と接尾辞にマップする2番目のファイルからルックアップテーブルを作成したいと思うでしょう。以下は擬似コードですが、十分に作業する必要があります。

from collections import defaultdict 
districts = defaultdict(dict) 
import re 
dist_regex = re.compile(r"(?P<district>[A-Za-z])+(?P<suffix>[0-9]?)" 

for row in ws2.iter_rows(min_col=1, max_col=5): 
    dept = row[0] 
    m = dist_regex.match(row[-1]).groupdict() 
    dist = m['district'] 
    suffix = m['suffix'] 
    districts[dist][dept] = suffix 

これは、あなたが最初のファイルの行をループ地区と部門の組み合わせは接尾辞を持っているかどうかを確認し、必要に応じて追加することができ

{'BARRANCA': {'LIMA':None}, {'LORETO':'1',…} 

のようなものを与える必要があります。

+0

お手伝いいただきありがとうございます、私はあなたが私に示された方向を維持し、解決策を見つけようとします! – zobalette

関連する問題