使用从CSV生成的词典使用python

时间:2016-10-06 01:53:01

标签: python python-3.x csv dictionary openpyxl

我每天都会收到旧的Excel 95数据文件。它有一列直到字母'L'和数百行。 列'B'是客户参考编号,对每个客户都是唯一的。 列'I'是美元值。

每天早上我都需要使用此文件来更新另一个Excel文件。我搜索客户参考编号,然后输入美元值。客户参考列和目标文件中的美元值分别为“D”和“E”。

由于我是python的新手,我认为这将是一个很好的自动化项目。在研究和安装了一些其他模块之后(并阅读了使用python书自动化无聊的东西),我还没有取得任何成功。

我将源文件保存为csv,然后导入csv,然后将其转换为python中的字典。这很好用,我很满意。

我的问题是尝试将值写入目标文件。我没有错误,文件最后保存,但是当我打开它时,值不存在。我不知道为什么。任何帮助表示赞赏。

import os, csv, openpyxl

os.chdir('nameOfMyDirectory')

print('What is the name of the source file?')
sourceFileName = input()

print('What is the key column?')
keyColumn = int(input())

print('What is the value column?')
valueColumn = int(input())

source = csv.reader(open(sourceFileName + '.csv'))
sourceDictionary = {}
for row in source:
    key = row[keyColumn]
    sourceDictionary[key] = row[8]

上面的翻译似乎有效,我可以使用交互式shell使用键列打印美元值。我把它包括在内,因为我错了,这也需要改变。

以下是问题所在(我认为)

print('What is the destination file name?')
destinationFileName = input()

wb = openpyxl.load_workbook(destinationFileName + '.xlsx')
sheet = wb.get_sheet_by_name('nameOfMySheet')

allRows = sheet.max_row

for rowNum in range(2, allRows): #Start from row 2 and go to the end
    membershipID = sheet.cell(row=rowNum, column=4).value
    if membershipID in sourceDictionary:
        sheet.cell(row=rowNum, column=5).value = sourceDictionary[membershipID]


wb.save('newFileName.xlsx')

程序运行且没有错误。新文件以文件名保存,但值未更新,它们仍为空白。

我不确定openpyxl column = 4的值是否是从1或0开始的值之一,所以我尝试从两者开始计数,两者都不起作用。

任何帮助都非常感激。

我被要求显示一些示例数据,因此这里有2个google工作表的链接,这些工作表与源文件csv和目标文件xlsx相同。希望这可以帮助。 Link to sheets

我正在尝试使用“源文件列I”更新“目标文件的列E”。我使用客户ID列作为参考。

1 个答案:

答案 0 :(得分:0)

问题只是类型不匹配。从csv读入的密钥为string格式,从Excel表格中读取的值为float值。因此,与{2}匹配的if语句始终返回 false

要对齐数据类型,请在第二个for循环中调整以下行,首先转换为整数然后转换为字符串:

membershipID = str(int(sheet.cell(row=rowNum, column=4).value))