使用CSV生成的字典使用python更新.xlsx文件中的值
每天我都会收到一份旧的Excel 95数据文件。它有多达字母“L”的列和数百行。 “B”列是一个客户参考号,对每个客户都是唯一的。 “I”列是美元值 每天早上我都需要使用此文件更新另一个Excel文件。我搜索客户参考号,然后输入美元值。目标文件中客户参考和美元价值的列分别为“D”和“E” 由于我是python新手,我认为这将是一个很好的自动化项目。在研究和安装了一些其他模块(并阅读了《用python自动化无聊的东西》一书)之后,我还没有取得任何成功 我将源文件保存为csv,然后导入csv,然后将其转换为python中的词典。这个很好用,我很满意 我的问题是试图将值写入目标文件。我没有得到任何错误,文件保存在最后,但当我打开它的值不存在。我不知道为什么。感谢您的帮助使用CSV生成的字典使用python更新.xlsx文件中的值,python,python-3.x,csv,dictionary,openpyxl,Python,Python 3.x,Csv,Dictionary,Openpyxl,每天我都会收到一份旧的Excel 95数据文件。它有多达字母“L”的列和数百行。 “B”列是一个客户参考号,对每个客户都是唯一的。 “I”列是美元值 每天早上我都需要使用此文件更新另一个Excel文件。我搜索客户参考号,然后输入美元值。目标文件中客户参考和美元价值的列分别为“D”和“E” 由于我是python新手,我认为这将是一个很好的自动化项目。在研究和安装了一些其他模块(并阅读了《用python自动化无聊的东西》一书)之后,我还没有取得任何成功 我将源文件保存为csv,然后导入csv,然后将
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使用键列打印美元值。我已经把它包括在内,以防我错了,这也需要改变
下面是问题所在(我想)
程序运行,没有错误。新文件与文件名一起保存,但值未更新,仍然为空
我不确定openpyxl column=4值是否是从1或0开始的值之一,因此我尝试从这两个值开始计数,但这两个值都不起作用
非常感谢您的帮助
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]
我被要求展示一些示例数据,因此这里有一个指向两个google工作表的链接,它们与源文件csv和目标文件xlsx相同。希望这有帮助
我正在尝试用“源文件列I”更新“目标文件的列E”。我使用客户ID列作为参考 问题只是类型不匹配。从csv读取的键为
string
格式,从Excel工作表读取的值为float
值。因此,匹配这两个变量的if
语句总是返回false
要对齐数据类型,请在第二个循环中调整以下行,首先将其转换为整数,然后转换为字符串:
membershipID = str(int(sheet.cell(row=rowNum, column=4).value))
问题很简单,就是类型不匹配。从csv读取的键为string
格式,从Excel工作表读取的值为float
值。因此,匹配这两个变量的if
语句总是返回false
要对齐数据类型,请在第二个循环中调整以下行,首先将其转换为整数,然后转换为字符串:
membershipID = str(int(sheet.cell(row=rowNum, column=4).value))
你能发布数据来说明你在说什么吗?特别是当前的布局和期望的结果?我在我的问题中添加了一个指向2张谷歌工作表的链接。希望这有帮助。我怀疑if
子句的计算结果是False
。你可以在里面放一些调试代码,比如打印语句来检查。你能发布数据来说明你在说什么吗?特别是当前的布局和期望的结果?我在我的问题中添加了一个指向2张谷歌工作表的链接。希望这有帮助。我怀疑if
子句的计算结果是False
。您可以将一些调试代码(如打印语句)放入其中进行检查。