根据不同文件的单元格更新单元格值

时间:2017-03-28 16:38:48

标签: excel python-2.7 cell updates openpyxl

我正在编写我的第一个代码(必须从一些东西开始:))我真的很挣扎,因为我无法在互联网上找到任何类似的例子给我至少一个方向。 我会尽可能地清楚地解释它。

我有两个部门的.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

正如您所看到的,区域可以具有相同的名称,但重复项属于不同的部门。 我的预期结果是按如下方式更新文件1:

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

对于可以帮助我的工具的任何建议?我尝试了一个简单的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 :(得分:0)

问题不是很清楚,特别是应该保留哪些值。我很想从第二个文件创建一个查找表,它将区域映射到部门和后缀。以下是伪代码,但应该足以让你使用。

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',…}

然后,您可以遍历第一个文件的行,检查区和部门的组合是否有后缀并根据需要添加。