【问题标题】:Assign Python variables from Excel spreadsheet从 Excel 电子表格分配 Python 变量
【发布时间】:2021-07-18 12:35:35
【问题描述】:

我想创建一个 Python 脚本,根据特定时间(更准确地说是日落和日出)更改我的壁纸,并在白天和黑夜交替使用 2 张图片。

对于壁纸更换部分,我已经设法将一些东西放在一起,哪种效果好,但现在我碰壁了,我不知道该走哪条路。

我有一个包含 3 列的 Excel 电子表格(day_of_year-包含日期-sunrise-包含时间-sunset-包含time-),并且我想在 Python 中创建 2 个变量(sunrise_todaysunset_today),这将使我从电子表格中获得今天的相应值。在 Excel 环境中,这将被称为 VLOOKUP,使用 TODAY() 作为键。

这正是我想要的:

【问题讨论】:

  • 您是否尝试过使用 Pandas 输入电子表格? Pandas 有各种用于处理日期/时间数据的实用程序。
  • 有点离题:您可以在 Python 中计算日出和日落时间,而无需考虑电子表格。查看我对问题的回答Javascript or Python - How do I figure out if it's night or day?
  • @martineau 感谢您的意见。问题是我想根据特定位置使用一些官方/发布的数据来进行民用日出/日落。到目前为止,我已经尝试了几个可以回答我的问题的选项,但遗憾的是没有找到任何东西(发布的数据和输出之间总是存在 1 到 10 分钟的差异)。
  • 我的答案中的代码适用于给定其经度和纬度(加上时区)的任何位置。但是,如果您想使用某种已发布的数据,我知道需要阅读电子表格。请注意,有许多第三方模块可以提供读取(和写入)xlsx 格式文件的方式)。

标签: python excel


【解决方案1】:

这应该可以毫不费力地拉出正确的行。

from datetime import datetime
import pandas

file_path = "Your_Excel_File.xls"
data = pandas.read_excel(file_path, header=0) #I assume the column names are on line 0

#Find today as day of year
day = datetime.now().timetuple().tm_yday

#Grab today's info
sunrise = data["sunrise"][day-1] #Minus 1 to account for 0 based indexing
sunset = data["sunset"][day-1]

【讨论】:

  • 感谢您的回复!一切都清晰简洁。但是,我尝试了您的方法,但出现以下语法错误。出于某种原因,我认为我应该以接近 file_path 的方式缺少一些东西。 文件 "",第 4 行 file_path = "C:\Users\mariu\Desktop\DateTime.xlsx" ^ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes在位置 2-3:截断 \UXXXXXXXX 转义
  • @instaspam:仅供参考,您可以使用有限版本的降价来很好地格式化您的问题、评论和答案。 Here's some formatting help.
  • 回来终于结束话题了。显然我的代码中有一个错字,我用大写字母将列标题称为“日出”和“日落”,在函数中它们被称为“日落”和“日出”(小写)。我重新检查了我的代码,更改了标题名称以更好地适应代码,现在一切都很好。非常感谢!
【解决方案2】:

这可能不是最好的方法,但你可以使用 pandas 和 openpyxl 来做到这一点:

import pandas as pd
from openpyxl import load_workbook

xls_file = "YourFile.xls"
xls_sheet = "YourSheet"
XLSXreader=pd.ExcelFile(xls_file, engine = 'openpyxl')
INP_Data = pd.read_excel(XLSXreader,sheet_name=xls_sheet,eader=1)

这将生成一个 INP_Data,它是一个 Pandas 数据帧。您可以通过以下方式访问这些值:

INP_Data['YourHeaderName']

您可以通过以下方式将其转换为 numpy 数组:

INP_Data['YourHeaderName'].to_numpy()

检查哪一行是您当前的日期:

Date_Line = INP_Data['YourHeaderName'].to_numpy() == YourCurrentDate

然后得到上升时间

RisingTime = INP_Data['RisinTimeHeader'].to_numpy()[Date_Line]

注意:查看 pd.read_excel 函数以定义要读取的标题行和列。

希望能有所帮助。干杯!!

【讨论】:

  • 非常感谢!这将是一个很好的起点。我会对此进行测试并提供反馈。
猜你喜欢
  • 2021-04-05
  • 2021-01-07
  • 2013-01-23
  • 2020-03-14
  • 2017-06-09
  • 1970-01-01
  • 2018-06-07
  • 2015-09-28
  • 1970-01-01
相关资源
最近更新 更多