gpt4 book ai didi

Python 在不知道 key 名称的情况下下载 S3 文件

转载 作者:行者123 更新时间:2023-11-28 17:02:23 24 4
gpt4 key购买 nike

我正在编写一个 Python 脚本,该脚本通过 Athena 运行查询,将其输出到 S3 并将其下载到我的计算机中。我能够通过 Athena 运行我的查询并将结果输出到 S3。所以我似乎无法弄清楚的下一步是如何在不知道 key 名称的情况下将其下载到我的计算机?

在将它输出到 Athena 之后,有没有办法在我的 python 脚本中查找对象键?
我完成了什么:

# Output location and DB
s3_output = ‘s3_output_here’
database = ‘database_here’

# Function to run Athena query
def run_query(query, database, s3_output):
while True:
try:
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': database
},
ResultConfiguration={
'OutputLocation': s3_output,
}
)
return response
break
except client.exceptions.TooManyRequestsException as e:
print('Too many requests, trying again after sleep')
time.sleep(100)

# Our SQL Query
query = """
SELECT *
FROM test
”””

print("Running query to Athena...")
res = run_query(query, database, s3_output)

我了解如何使用此代码下载文件:

try:
s3.Bucket(BUCKET_NAME).download_file(KEY, ‘KEY_HERE’)
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise

那么在运行我的第一个完整代码后如何读取键名?

最佳答案

您可以使用boto库提供的get_key命令获取 key 。这就是我从 s3 下载内容的方式:

    with open("path/aws-credentials.json") as f:
data= json.load(f)
conn = boto.connect_s3(data["accessKeyId"], data["secretAccessKey"])
bucket = conn.get_bucket('your_bucket')
file_path = bucket.get_key('path/to/s3/file')
file_path.get_contents_to_filename('path/on/local/computer/filename')

如果您只是测试一些东西,您可以将您的凭据硬编码到代码中,但如果您计划将其投入生产,最好将您的凭据存储在类似 json 文件的外部文件中。

关于Python 在不知道 key 名称的情况下下载 S3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53563165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com