python - 在循环中创建变量然后分配

我试图在循环中创建变量,然后在同一个循环迭代中为它们赋值。我的代码失败了,我可以看到原因,但无法弄清楚如何修复它。我正在使用 Python 3.6 和所有导入包的当前版本。这是我的代码:


import openpyxl


months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']


for month in months:

    filepath = 'C:\codes\Furnace_time_log\\2019\\' + month + '_2019.xlsx'

    workbook_name = month+'_wb'

    workbook_name =  openpyxl.load_workbook(filepath)

    sheet_name = month+'_sheet'

    sheet_name = workbook_name.get_sheet_by_name('Sheet1')

我想要的是 12 个名为“January_sheet”、“February_sheet”、...的 openpyxl 工作表对象


在我的代码前面,我有以下示例,它完全符合它的预期。这就是我将错误代码的逻辑基于:


head_wb = openpyxl.load_workbook('C:\codes\Furnace_time_log\head.xlsx')

head_sheet = head_wb.get_sheet_by_name('Sheet 1')

我正在使用一个 Excel 文件,其中每一行都包含一个日期和许多其他有用的信息。如果第 x 行的日期是 1 月,我需要将相邻数据放在单独的 XLSX 文档(“January_2019.xlsx”)中,我可以通过 January_sheet 对象对其进行编辑。


关于如何做到这一点的任何建议?另外,我不关心性能。此代码只需在完整数据集上运行一次。我意识到这样做可能比同时打开 12 个 openpyxl 工作簿和工作表更有效。话虽如此,欢迎任何更好的方法来实现这一点。


婷婷同学_
浏览 77回答 2
2回答

慕码人8056858

我根本不知道你的界面,但这是我收集到的:import openpyxlmonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']sheets = {}for month in months:    filepath = 'C:\\codes\\Furnace_time_log\\2019\\' + month + '_2019.xlsx'    workbook =  openpyxl.load_workbook(filepath)    sheet_name = month + '_sheet'    sheet = workbook_name.get_sheet_by_name(sheet_name)    sheets[month] = sheet这是假设您的工作表已命名xxxx_month(例如January_month,区分大小写)而不是Sheet1您最初使用的名称。完成后,您将拥有一个字典,将月份名称映射到工作表对象。如果我所做的某些事情没有意义,请告诉我,我会进行编辑。

喵喵时光机

我可以看到您的代码存在几个问题:文件名中的转义序列不正确。重新分配变量。您正在尝试创建两组不同的动态变量:工作簿和工作表,但没有建立它们之间的关系。在下面的代码中,第一行将值存储到变量“sheet_name”。第二个将新值存储到相同的变量中,更改其值:sheet_name = month+'_sheet'sheet_name = workbook_name.get_sheet_by_name('Sheet1') 您要做的是动态创建变量名称和值。除非非常需要创建这样的变量集,否则我建议为此使用列表或字典:months = ['January', 'February', 'March','April', 'May', 'June', 'July',           'August', 'September', 'October', 'November', 'December']wb_format = r'C:\codes\Furnace_time_log\2019\{}_2019.xlsx'workbooks = dict((month, wb_format.format(month)) for month in months)如果您真的想创建这些变量,请查看locals()和globals(),但请务必小心。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python