检查电子表格的每个单元格与另一个单元格的最佳方法?

时间:2013-08-21 15:33:00

标签: python xlrd xlwt

我正在使用python包xlrd和xlwt来使用python从excel电子表格中读取和写入。我无法弄清楚如何编写代码来解决我的问题。

我的第一个电子表格中有一个列,其中包含2个字母缩写形式的状态名称和全名(一些全部小写,一些首字母大写)。我正在尝试写另一张纸,读取第一张纸上的名称,看它们是否与第二张纸上的名称相匹配,并将它们写在第三张纸上,作为第二张纸上的状态缩写。这有意义吗?

无论如何,没有制作五十个单独的“for”循环,我不知道该怎么做。 这是我到目前为止所做的,但运行它写了一个空白的第一列。

import xlrd #reads
import xlwt #writes

input_book = xlrd.open_workbook("file_path_here")
input_sheet = input_book.sheet_by_index(0)
state_book = xlrd.open_workbook("file_path2_here")
state_sheet = state_book.sheet_by_index(0)
output_book = xlwt.Workbook()
output_sheet = output_book.add_sheet('test')

for row in range(input_sheet.nrows):
    state = input_sheet.cell_value(row, colx=1) #state names are in col 1
    Value1 =input_sheet.cell_value(row, colx=2) #data being left unchanged, just copied to output sheet
    Value2 =input_sheet.cell_value(row, colx=3)
    Value3 =input_sheet.cell_value(row, colx=4)
    for name in range(state_sheet.nrows):  #a sheet with state names in col 0, state abrevs in col 1
        state_name = state_sheet.cell_value(name,colx=0)
        state_abrev = state_sheet.cell_value(name, colx=1)
        if state.lower() == state_name:
            output_sheet.write(row,0,state_abrev)
    output_sheet.write(row,1,Value1)
    output_sheet.write(row,2,Value2)
    output_sheet.write(row,3,Value3)

print ('done')
output_book.save('output.xls')

1 个答案:

答案 0 :(得分:2)

这听起来像是一本字典 - 首先创建一本字典

state_abbrs = {}
for name in range(state_sheet.nrows):  #a sheet with state names in col 0, state abrevs in col 1
    state_name = state_sheet.cell_value(name, colx=0)
    state_abrev = state_sheet.cell_value(name, colx=1)
    state_abbrs[state_name.lower()] = state_abbr

然后使用它:

for row in range(input_sheet.nrows):
    state = input_sheet.cell_value(row, colx=1) #state names are in col 1
    Value1 = input_sheet.cell_value(row, colx=2) #data being left unchanged, just copied to output sheet
    Value2 = input_sheet.cell_value(row, colx=3)
    Value3 = input_sheet.cell_value(row, colx=4)

    output_sheet.write(row, 0, state_abbrs.get(state.lower(), '')
    output_sheet.write(row, 1, Value1)
    output_sheet.write(row, 2, Value2)
    output_sheet.write(row, 3, Value3)