我有用于提取包含嵌套檔案夾的 zip 檔案夾內的 csv 的代碼。當 zip 檔案位于本地但我們將檔案移動到 S3 存盤桶時,此代碼效果很好。我想在 AWS lambda 函式中應用我現有的代碼,但是我不確定如何從 S3 訪問 zip 檔案。此代碼最初設計用于對多個 zip 檔案進行操作,因此是回圈的,在這種新情況下,它只是一個 zip 檔案,但為了簡單起見,我剛剛使用回圈復制了現有代碼。
缺少以下代碼的代碼片段:
all_files = NEED CODE THAT GRABS ZIP FILE STORED ON S3
for file in all_files:
with ZipFile(file) as zip:
for zip_info in zip.infolist():
if zip_info.filename[-1] == '/':
continue
zip_info.filename = os.path.basename(zip_info.filename)
master_df = pd.read_csv(zip.open(zip_info))
master_df = pd.concat((pd.read_csv(f, encoding = 'ANSI',dtype='str') for f in all_files), ignore_index=True)
master_df.drop(master_df.columns[0],axis=1, inplace= True)
master_df.columns = [x.replace("\n", "") for x in
master_df.columns.str.strip().to_list()]
master_df.rename(columns = {'Date':'REPORT_PERIOD', 'Ad Impressions':'IMPRESSIONS', 'Publisher Currency Revenue':'REVENUE'}, inplace=True)
uj5u.com熱心網友回復:
最簡單的方法是將download_file()Zip 檔案下載到/tmp/目錄(這是 AWS Lambda 函式中唯一可寫的位置)。
例如:
import boto3
s3_client = boto3.client('s3')
s3_client.download_file('bucket-name', 'file.zip', '/tmp/file.zip')
然后,您的代碼可以/tmp/file.zip正常訪問本地檔案。
此外,請注意 Lambda 函式環境可能會被重用于未來的函式執行。因此,通常最好洗掉所有下載的檔案,否則可能會消耗所有 512MB 的可用存盤空間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443930.html
