python-3.x 如何在AWS Wrangler中从S3读取Excel工作表的工作表名称?

hec6srdp  于 2023-06-25  发布在  Python
关注(0)|答案(3)|浏览(135)

我有一个Excel工作表,这是放在S3,我想读取Excel工作表的工作表名称。I have read excel sheet with aws wrangler using awswrangler.s3.read_excel(path)我如何使用AWS Wrangler using Python读取sheetnames?

r7knjye2

r7knjye21#

我不确定你能在牧马人,或者至少我还没有能够弄清楚。您可以使用Wrangler将工作表下载到临时文件中,然后使用pyxlsb/openpyxl(使用两者来覆盖所有格式):

from openpyxl import load_workbook
from pyxlsb import open_workbook
import awswrangler as wr
import os
import pandas as pd

s3_src = 's3://bucket/folder/workbook.xlsb'
filename = os.path.basename(s3_src)

wr.s3.download(path=s3_src, local_file=filename)

if filename.endswith('.xlsb'):
    workbook = open_workbook(filename)
    sheets = workbook.sheets
else:
    workbook = load_workbook(filename)
    sheets = workbook.sheetnames

# Load all sheets into an array of dataframes
dfs = [pd.read_excel(filename, sheet_name=s) for s in sheets]

# Or now that you have the sheet names, load using Wrangler
dfs = [wr.s3.read_excel(s3_src, sheet_name=s) for s in sheets]

您可以提取工作表的名称并将它们作为输入传递给执行提取的另一个进程。

djp7away

djp7away2#

牧马人不支持这一点。Pandas可以,但是pandas不能很好地处理aws_lambda。

import io
import boto3
import openpyxl

session = boto3.Session()
s3_client = boto3.client('s3')
obj = s3_client.get_object(Bucket=my_bucket, Key=my_key)  
body = obj['Body'].read()
wb = openpyxl.load_workbook(io.BytesIO(body))
sheet_names = wb.get_sheet_names()
v64noz0r

v64noz0r3#

根据 read_excel() 函数的***awswrangler***docs

  • 此函数接受任何Pandas的read_excel()参数。*

pandas中:

sheet_name:str、int、list或None,默认为0

所以你可以试试这样的方法:

import awswrangler as wr
wr.s3.read_excel(file_uri,sheet_name=your_sheet)

我目前在AWS Glue中面临着类似的问题,但还没有设法让它工作。

相关问题