为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2022-06-14 10:51:28
我试图在循环中创建变量,然后在同一个循环迭代中为它们赋值。我的代码失败了,我可以看到原因,但无法弄清楚如何修复它。我正在使用 Python 3.6 和所有导入包的当前版本。这是我的代码:import openpyxlmonths = ['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 工作簿和工作表更有效。话虽如此,欢迎任何更好的方法来实现这一点。
查看完整描述

2 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我根本不知道你的界面,但这是我收集到的:


import openpyxl


months = ['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您最初使用的名称。完成后,您将拥有一个字典,将月份名称映射到工作表对象。


如果我所做的某些事情没有意义,请告诉我,我会进行编辑。


查看完整回答
反对 回复 2022-06-14
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我可以看到您的代码存在几个问题:

  1. 文件名中的转义序列不正确。

  2. 重新分配变量。

  3. 您正在尝试创建两组不同的动态变量:工作簿和工作表,但没有建立它们之间的关系。

在下面的代码中,第一行将值存储到变量“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(),但请务必小心。


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信