![](/img/trans.png)
[英]download multiple files which were last uploaded or today uploaded files from s3 bucket using python code
[英]Is there a way to merge multiple CSV files uploaded to AWS S3 bucket using Python?
我需要設置一個 AWS Lambda 函數,該函數在新的 CSV 文件上傳到 S3 存儲桶時觸發,以將 CSV 文件合並為一個主文件(它們將具有相同數量的列和列名),然后上傳新的主文件到另一個 S3 存儲桶。
我將 Python 用於 Lambda 函數。 我用我的 Lambda 函數和我使用的依賴項(Pandas 和 Numpy)創建了一個 zip 文件夾並上傳了它。
目前,我必須在 zip 文件夾本身中包含我想要合並在一起的 CSV 文件,當我簽入 CloudWatch 時,該函數會合並這些 CSV 文件並且輸出(主文件)在日志中。
我不知道如何將我的代碼鏈接到 S3 存儲桶以進行輸入和輸出。
這是我正在開發的應用程序。
這是我正在使用的python代碼:
import os
import glob
import numpy
import pandas as pd
def handler(event, context):
#find all csv files in the folder
#use glob pattern matching -> extension = 'csv'
#save result in list -> all_filenames
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
#combine all files in the list
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ])
#export to csv
combined_csv.to_csv( "/tmp/combined_csv.csv", index=False, encoding='utf-8-sig')
f = open("/tmp/combined_csv.csv", "r")
print(f.read())
f.close()
我不想每次都在與我的 python 腳本相同的 zip 文件夾中手動輸入 CSV 文件,並且還需要將輸出的 Master CSV 文件放在單獨的 S3 存儲桶中。
我建議您使用Amazon Athena執行此操作。
CREATE EXTERNAL TABLE
以定義 Amazon S3 中的輸入位置和格式CREATE TABLE AS
以使用查詢(例如SELECT * FROM input-table
)定義 Amazon S3 中的輸出位置和格式(CSV Zip)這樣,就無需下載、處理和上傳文件。 這一切都將由亞馬遜雅典娜完成。 另外,如果輸入文件被壓縮,成本會更低,因為 Athena 是根據從磁盤讀取的數據量收費的。
您可以從 AWS Lambda 函數調用 Amazon Athena。 只要確保它只在所有輸入文件就位后才調用 Athena。
嘗試以下代碼:確保首先下載 s3fs,然后安裝 boto3
import s3fs
import pandas as pd
import boto3
client = boto3.client('s3')
keys = []
bucket = 'your_bucket'
resp = client.list_objects_v2(Bucket = bucket)
for i in resp['Contents']:
print(i['Key'])
if ('prefix' in i['Key']) & ('.csv' in i['Key']): // prefix filter
n = "s3://" + bucket + "/"+ i['Key']
print(n)
keys.append(n)
print(keys)
data = pd.concat([pd.read_csv((k)) for k in keys])
print(data)
data.to_csv( "final.csv", index=False, encoding='utf-8-sig') #use this line if you want to download the file local
path = "s3://bucket_name/folders/" + "filename.csv"
data.to_csv( path, index=False, encoding='utf-8-sig')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.