python - 在循环中创建变量然后赋值
python - Create variables in loop then assign
我正在尝试在循环内创建变量,然后在同一个循环迭代中为它们赋值。我的代码失败了,我知道为什么,但不知道如何修复它。我将 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 sheet 对象
在我的代码前面,我有以下示例,它完全按照预期的方式工作。这就是我错误代码的逻辑依据:
head_wb = openpyxl.load_workbook('C:\codes\Furnace_time_log\head.xlsx')
head_sheet = head_wb.get_sheet_by_name('Sheet 1')
我正在处理一个 Excel 文件,其中每一行都包含一个日期和许多其他有用的信息。如果第 x 行的日期是一月,我需要将相邻数据放在单独的 XLSX 文档 ("January_2019.xlsx") 中,我可以通过 January_sheet 对象对其进行编辑。
关于如何做到这一点有什么建议吗?另外,我不关心性能。此代码只需要 运行 对完整数据集执行一次。我意识到可能有一种比同时打开 12 个 openpyxl 工作簿和 sheets 更有效的方法。话虽这么说,欢迎任何更好的方法来实现这一目标。
我完全不知道你的界面,但这是我收集到的:
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
这是假设您的 sheet 被命名为 xxxx_month
(例如 January_month
,区分大小写)而不是您最初使用的 Sheet1
。完成此操作后,您将拥有一个将月份名称映射到 sheet 对象的字典。
如果我所做的事情没有意义,请告诉我,我会进行编辑。
我发现你的代码有几个问题:
- 文件名中的转义序列不正确。
- 正在重新分配变量。
- 您正在尝试创建两组不同的动态变量:工作簿和工作表,但没有建立它们之间的关系。
在下面的代码中,第一行将值存储到变量 '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_log19\{}_2019.xlsx'
workbooks = dict((month, wb_format.format(month)) for month in months)
我正在尝试在循环内创建变量,然后在同一个循环迭代中为它们赋值。我的代码失败了,我知道为什么,但不知道如何修复它。我将 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 sheet 对象在我的代码前面,我有以下示例,它完全按照预期的方式工作。这就是我错误代码的逻辑依据:
head_wb = openpyxl.load_workbook('C:\codes\Furnace_time_log\head.xlsx')
head_sheet = head_wb.get_sheet_by_name('Sheet 1')
我正在处理一个 Excel 文件,其中每一行都包含一个日期和许多其他有用的信息。如果第 x 行的日期是一月,我需要将相邻数据放在单独的 XLSX 文档 ("January_2019.xlsx") 中,我可以通过 January_sheet 对象对其进行编辑。
关于如何做到这一点有什么建议吗?另外,我不关心性能。此代码只需要 运行 对完整数据集执行一次。我意识到可能有一种比同时打开 12 个 openpyxl 工作簿和 sheets 更有效的方法。话虽这么说,欢迎任何更好的方法来实现这一目标。
我完全不知道你的界面,但这是我收集到的:
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
这是假设您的 sheet 被命名为 xxxx_month
(例如 January_month
,区分大小写)而不是您最初使用的 Sheet1
。完成此操作后,您将拥有一个将月份名称映射到 sheet 对象的字典。
如果我所做的事情没有意义,请告诉我,我会进行编辑。
我发现你的代码有几个问题:
- 文件名中的转义序列不正确。
- 正在重新分配变量。
- 您正在尝试创建两组不同的动态变量:工作簿和工作表,但没有建立它们之间的关系。
在下面的代码中,第一行将值存储到变量 '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_log19\{}_2019.xlsx'
workbooks = dict((month, wb_format.format(month)) for month in months)