如何使用 tempfile.NamedTemporaryFile() 保存图像?
How to use tempfile.NamedTemporaryFile() to save an image?
我正在尝试在 Python 中编写一个代码,它将在 tableau 中获取仪表板的图片并将其发送到松弛通道。
第一部分完美运行并将图像保存到我的本地笔记本电脑。但是当尝试将图像保存在临时路径中并将其发送到频道时,我收到错误消息:
---> 45 f = {'file': (temp_file.name, open(temp_file.name, 'rb'), 'png')}
46 response = requests.post(url='slack./com/api/files.upload', data= 47 {'token': bot_token, 'channels': slack_channels, 'media': f,'initial_comment' :''},
PermissionError: [Errno 13] Permission denied: 'C:\Users\Userlogin-~1\AppData\Local\Temp\tmp3fzm10gj.png'
代码如下:
import requests
from slack import WebClient
from datetime import date, timedelta, datetime
import tableauserverclient as TSC
from tableau_api_lib import TableauServerConnection
from tableau_api_lib.utils.querying import get_views_dataframe, get_view_data_dataframe
req_option = TSC.RequestOptions().page_size(1000)
image_req_option = TSC.ImageRequestOptions(imageresolution=TSC.ImageRequestOptions.Resolution.High)
with server.auth.sign_in(tableau_auth):
all_workbooks, pagination_item = server.workbooks.get(req_option)
workbook_id_ = [workbook.id for workbook in all_workbooks if workbook.name == workbook_name][0]
workbook = server.workbooks.get_by_id(workbook_id_)
all_views= workbook.views
for view_item in all_views:
if view_item.name == view_name:
with tempfile.NamedTemporaryFile(suffix='.png', delete=True) as temp_file:
server.views.populate_image(view_item, req_options=image_req_option)
temp_file.write(view_item.image)
print('image is created')
# I get the error after the print
f = {'file': (temp_file.name, open(temp_file.name, 'rb'), 'png')}
response = requests.post(url='https://slack./com/api/files.upload', data=
{'token': bot_token, 'channels': slack_channels, 'media': f, 'initial_comment' :''},
headers={'Accept': 'application/json'}, files=f)
print('the image is in the channel')
发生错误是因为您试图在此处重新打开一个已打开的文件:
f = {'file': (temp_file.name, open(temp_file.name, 'rb'), 'png')}
试试看:
temp_file.file.seek(0) # change the position to the beginning of the file
f = {'file': (temp_file.name, temp_file, 'png')}
我正在尝试在 Python 中编写一个代码,它将在 tableau 中获取仪表板的图片并将其发送到松弛通道。 第一部分完美运行并将图像保存到我的本地笔记本电脑。但是当尝试将图像保存在临时路径中并将其发送到频道时,我收到错误消息:
---> 45 f = {'file': (temp_file.name, open(temp_file.name, 'rb'), 'png')}
46 response = requests.post(url='slack./com/api/files.upload', data= 47 {'token': bot_token, 'channels': slack_channels, 'media': f,'initial_comment' :''},
PermissionError: [Errno 13] Permission denied: 'C:\Users\Userlogin-~1\AppData\Local\Temp\tmp3fzm10gj.png'
代码如下:
import requests
from slack import WebClient
from datetime import date, timedelta, datetime
import tableauserverclient as TSC
from tableau_api_lib import TableauServerConnection
from tableau_api_lib.utils.querying import get_views_dataframe, get_view_data_dataframe
req_option = TSC.RequestOptions().page_size(1000)
image_req_option = TSC.ImageRequestOptions(imageresolution=TSC.ImageRequestOptions.Resolution.High)
with server.auth.sign_in(tableau_auth):
all_workbooks, pagination_item = server.workbooks.get(req_option)
workbook_id_ = [workbook.id for workbook in all_workbooks if workbook.name == workbook_name][0]
workbook = server.workbooks.get_by_id(workbook_id_)
all_views= workbook.views
for view_item in all_views:
if view_item.name == view_name:
with tempfile.NamedTemporaryFile(suffix='.png', delete=True) as temp_file:
server.views.populate_image(view_item, req_options=image_req_option)
temp_file.write(view_item.image)
print('image is created')
# I get the error after the print
f = {'file': (temp_file.name, open(temp_file.name, 'rb'), 'png')}
response = requests.post(url='https://slack./com/api/files.upload', data=
{'token': bot_token, 'channels': slack_channels, 'media': f, 'initial_comment' :''},
headers={'Accept': 'application/json'}, files=f)
print('the image is in the channel')
发生错误是因为您试图在此处重新打开一个已打开的文件:
f = {'file': (temp_file.name, open(temp_file.name, 'rb'), 'png')}
试试看:
temp_file.file.seek(0) # change the position to the beginning of the file
f = {'file': (temp_file.name, temp_file, 'png')}