从s3存储桶中读取.xlsx文件,并将每个选项卡转换为带有选项卡名称的csv并上传到存储桶

wlwcrazw  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(105)
import pandas as pd 
import xlrd 
import openpyxl 
from io import StringIO  
import boto3 

def lambda_handler(event,context):  
    df=pd.read_excel('s3://my-bucket/XL/test-xls.xlsx', engine='openpyxl')    
    bucket = 'my-bucket'   
    csv_buffer = StringIO() 
    df.to_csv(csv_buffer) 
    s3_resource = boto3.resource('s3') 

    # write the data back as a CSV 
    s3_resource.Object(bucket,'XL/test-csv.csv').put(Body=csv_buffer.getvalue())

1.上面的代码是一个Excel工作很好,但我正在寻找解决方案,我可以阅读XLSX文件
1.如果XLSX文件有3个选项卡,那么这3个选项卡应该转换成3个不同的CSV,并将文件保存到bucket tabname.csv

lawou6xi

lawou6xi1#

您可以尝试xlsx2csv而不是pandas。带有-n选项的xlsx2csv可能会工作。
另外xlsx2csv有更多的工作表选项卡选项卡,你可以选择适合你的。

pes8fvy9

pes8fvy92#

要读取特定的工作表,您只需将其作为参数传递给read_excel函数:

excel_object = s3.get_object(Bucket=source_bucket, Key=source_key)['Body'].read()
df_sheet1 = pd.read_excel(excel_object, sheet_name='name_of_sheet1')
df_sheet2 = pd.read_excel(excel_object, sheet_name='name_of_sheet2')
  • 注意:您也可以使用工作表从0开始的索引 *

如果要提取每个工作表,可以使用.sheet_names属性获取工作表名称

excel = pd.ExcelFile(s3_client.get_object(Bucket=source_bucket, Key=source_key)['Body'].read())
names = excel.sheet_names
for name in names:
  sheet = pd.read_excel(excel, sheet_name=name)

然后把每一张纸都提取出来
pandas.read_excel

相关问题