S3 在文件名中附加随机字符串
S3 appending random string in file name
我有一个 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 是正确的。
有什么想法吗?
为了解决问题,我将代码更改为:
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'])
s3_client.download_file("test", latest["Key"], "FILE_NAME"))
我在没有创建本地文件夹时遇到了这个问题。
folder1/folder2/filename.foo
如果folder1或folder2在本地不存在,boto3 returns错误:
FileNotFoundError: [Errno 2] No such file or directory: 'folder1/folder2/finemane.foo.F89bdcAc'
我有一个 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 是正确的。
有什么想法吗?
为了解决问题,我将代码更改为:
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'])
s3_client.download_file("test", latest["Key"], "FILE_NAME"))
我在没有创建本地文件夹时遇到了这个问题。
folder1/folder2/filename.foo
如果folder1或folder2在本地不存在,boto3 returns错误:
FileNotFoundError: [Errno 2] No such file or directory: 'folder1/folder2/finemane.foo.F89bdcAc'