我正在努力解决一个大问题。
我正在努力为同事实施一项计划。由于他善于使用Excel,他让我处理NHL数据。他创建了一个Excel文件,这可能会增加赢得'NHL投注池'的机会。我的功能是创建一个python程序,它将创建/更新带有相关数据的Excel表格(例如玩家统计数据,双赢游戏等)。
为了解释我的问题,假设一个带有“数据表”和“计算表”的简单Excel文件。计算表使用数据表中的数据。
如何在不制动计算的情况下更新数据表?我可以选择找到更新文件或删除文件并重新创建文件的方法,但第二个选项可能会破坏计算。也许正确的方法是比较旧数据表和新数据表并进行更新。
有没有办法调整我的代码,以便在未创建时更新Player statistics
工作表?
这是我到目前为止所做的:
def send_request():
# Request
try:
response = requests.get(
url="https://api.mysportsfeeds.com/v1.1/pull/nhl/2017-2018-regular/cumulative_player_stats.csv",
params={
"fordate": "20171009"
},
headers={
"Authorization": "Basic " +
base64.b64encode('{}:{}'.format(USERNAME,PASSWORD)\
.encode('utf-8')).decode('ascii')
}
)
print('Response HTTP Status Code: {status_code}'.format(
status_code=response.status_code))
print('Response HTTP Response Body: {content}'.format(
content=response.content))
except requests.exceptions.RequestException:
print('HTTP Request failed')
return response
def player_statistics():
"""
Add 'Player statistics' if the worksheet is not in file_name.
Otherwise, it will update the worksheet itself..
"""
os.chdir(os.path.dirname(os.path.abspath(__file__)))
response = send_request().content
df = pd.read_csv(io.StringIO(response.decode('utf-8')))
writer = pd.ExcelWriter(file_name, engine='openpyxl')
if os.path.exists(file_name):
book = openpyxl.load_workbook(file_name)
writer.book = book
if 'Player statistics' in book.get_sheet_names():
pass
else:
df.to_excel(writer, 'Player statistics', index=False)
writer.save()
writer.close()
player_statistics()
换句话说,我可以通过以下代码替换pass
,它可以工作吗?我可以使用http://openpyxl.readthedocs.io/en/latest/pandas.html进行调整吗?
if 'Player statistics' in book.get_sheet_names():
pass
else:
df.to_excel(writer, 'Player statistics', index=False)
请注意,此选项无关紧要,因为它会破坏计算。该工作表将被删除并再次创建,因此经过深思熟虑,但无用。
if os.path.exists(file_name):
book = openpyxl.load_workbook(file_name)
writer.book = book
if 'Player statistics' in book.get_sheet_names():
std=book.get_sheet_by_name('Player statistics')
book.remove_sheet(std)
df.to_excel(writer, 'Player statistics', index=False)
writer.save()
writer.close()