Я работаю над созданием небольшого приложения Google Geocode API для проекта.Я читаю в файле excel комбинаций long / lat, затем зацикливаюсь, вызывая api геокодирования, чтобы получить конкретное значение из возвращенного json, затем сохраняю его в файле excel.Чтобы учесть потенциальные сбои, приводящие к потере моей работы, у меня есть несколько вызовов .save () (из openpyxl) во время циклов.
Этот процесс работает некоторое время, ~ 20-200 + циклов, и затем я получу ошибку об отказе в разрешении для файла, в который я пытаюсь сохранить.
Это не соответствует другим вопросам об отказе в разрешении, которые я видел, так как знаю, что у меня есть разрешение, так как некоторые из сохранений работают.После ошибки в разрешении я могу проверить в Excel, что каждое сохранение до сбоя было успешным.
Я подозреваю, что я не до конца понимаю, как .save () (возможно, у него есть некоторые ограничения в том, как частоэто можно назвать?) работает (но не видел ничего из документации, которая помогла мне), и, вероятно, есть лучший способ справиться с этим процессом.Спасибо за любой совет!
Код ниже:
import urllib
import requests
import json
import openpyxl
from openpyxl import Workbook
from openpyxl import load_workbook
import time
main_api = 'https://maps.googleapis.com/maps/api/geocode/json?'
api_key = 'plz no steal'
#Load workbook for long/lat
workbook_in = load_workbook("crimexlonglat.xlsx")
rowNum = 625
loopCnt = 1
# #Declare workbook
wb = load_workbook("testxl.xlsx")
#wb = Workbook()
#grab active worksheet. Not sure why this is necessary
ws = wb.active
while (rowNum < 1000):
print('Loop ' + str(loopCnt))
#check for invalid lat/long and skip
if workbook_in['Sheet1']['A'+str(rowNum)].value == '0.00000000,0.00000000' or workbook_in['Sheet1']['A'+str(rowNum)].value == '-1.00000000,-1.00000000':
ws['A'+str(rowNum)] = ''
rowNum = rowNum + 1
loopCnt = loopCnt + 1
wb.save("testxl.xlsx")
else:
address = workbook_in['Sheet1']['A'+str(rowNum)].value
url = main_api + urllib.parse.urlencode({'address': address, 'key': api_key})
json_data = requests.get(url).json()
#Dump and load seems unncessary. Need to understand this better.
outputJson = json.dumps(json_data)
parsedJson = json.loads(outputJson)
ws['A'+str(rowNum)] = parsedJson['results'][0]['address_components'][2]['long_name']
rowNum = rowNum + 1
loopCnt = loopCnt + 1
wb.save("testxl.xlsx")
time.sleep(1)
wb.save("testxl.xlsx")
Текст ошибки:
Traceback (most recent call last):
File "c:\Users\johnsonm\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\ptvsd_launcher.py", line 43, in <module>
main(ptvsdArgs)
File "c:\Users\johnsonm\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\lib\python\ptvsd\__main__.py", line 432, in main
run()
File "c:\Users\johnsonm\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\lib\python\ptvsd\__main__.py", line 316, in run_file
runpy.run_path(target, run_name='__main__')
File "C:\Users\johnsonm\AppData\Local\Programs\Python\Python37-32\lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "C:\Users\johnsonm\AppData\Local\Programs\Python\Python37-32\lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\Users\johnsonm\AppData\Local\Programs\Python\Python37-32\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "c:\Users\johnsonm\OneDrive - XXX\Documents\Python Learning\API Projects\Test.py", line 44, in <module>
wb.save("testxl.xlsx")
File "C:\Users\johnsonm\AppData\Local\Programs\Python\Python37-32\lib\site-packages\openpyxl\workbook\workbook.py", line 409, in save
save_workbook(self, filename)
File "C:\Users\johnsonm\AppData\Local\Programs\Python\Python37-32\lib\site-packages\openpyxl\writer\excel.py", line 292, in save_workbook
archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True)
File "C:\Users\johnsonm\AppData\Local\Programs\Python\Python37-32\lib\zipfile.py", line 1204, in __init__
self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'testxl.xlsx'