【发布时间】:2022-04-22 17:11:26
【问题描述】:
我有一个 s3 文件夹,其中存储了一个 csv 文件。我正在尝试下载最后修改的文件。我正在使用这个脚本来获取最后修改的文件:
s3_client = boto3.client('s3', aws_access_key_id=s3_extra_data['aws_access_key_id'],
aws_secret_access_key=s3_extra_data['aws_secret_access_key'])
response = s3_client.list_objects_v2(Bucket='test', Prefix='file_r/')
all = response['Contents']
latest = max(all, key=lambda x: x['LastModified'])
response = s3_client.list_objects_v2(Bucket='test', Prefix=latest["Key"])[:-52].lower())
all = response['Contents']
latest = max(all, key=lambda x: x['LastModified'])
print("LATEST ->" + str(latest["Key"])[:-52].lower())
print("PATH ->" + str(latest["Key"]))
s3_client.download_file("test", latest["Key"], str(latest["Key"]))
这段代码列出了我最后修改的对象,文件名为part-00000-40f267f2-38dc-4bab-811c-4c3052fdb1ba-c000.csv,位于file_r文件夹内。
虽然,当我使用s3_client.download_file 时,我收到以下错误:
'file_r/part-00000-40f267f2-38dc-4bab-811c-4c3052fdb1ba-c000.csv.8cEebaeb'
当我打印我的路径和文件时,我得到了正确的值
LATEST -> file_r/part
PATH -> file_r/part-00000-40f267f2-38dc-4bab-811c-4c3052fdb1ba-c000.csv
为什么在.csv 扩展后附加值.8cEebaeb,因为PATH 是正确的。
对此有什么想法吗?
【问题讨论】:
-
当您打印 LATEST 时,您实际上并没有打印整个值;您正在打印
str(latest["Key"])[:-52].lower(),它会跳过最后 52 个字符。尝试打印整个值,以便准确查看字符串包含的内容。 -
另外,
path是在哪里定义的? -
@JohnGordon 关于您的第一条评论,它会打印正确的值(最后不附加随机值)。关于您的第二条评论,PATH 是
latest["Key"]。我已经编辑了这个问题来纠正这个问题。 -
你得到什么错误?哪条线路不合格? boto3 会在下载时为文件添加一个随机后缀,然后在下载完成后重命名文件。
-
@AnonCoward 我解决了这个问题。我在下面发布答案。
标签: python amazon-web-services amazon-s3 boto3