如何验证s3中的文件已在boto3中完全下载?

时间:2018-06-22 04:52:15

标签: python python-3.x amazon-s3 boto3

我需要从s3下载数据并将其另存为csv格式。 s3中对象的格式为:

s3://<bucketname>/<timestamp>/file

下载文件后,该文件将写在“ .csv”行中 现在,我需要检查它是否已完全下载,以便可以执行一些任务。

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
keys = bucket.objects.all()
for key in keys:      
    item = key.key.split('/') 
    bucket.download_file(key.key,"db/collecting/" + item[0] + ".csv")

2 个答案:

答案 0 :(得分:0)

    <input id='record_id' value='2'/>

<button class='PO'>Send<button>

<script>
var record_id= $('#record_id').val();
$('.P0').click(function(){
    $.ajax({
        type : 'post',
        url : 'wishlist.php',
        data : 'ID=' + record_id,
        success : function(ar){
        alert(ar);  
        }
    });
window.location = "http://localhost/FashionWorld/PAGES/wishlist.php";
});

</script>

您无需拆分对象名称或键,其次,一旦您的对象被下载(即完全下载),则只有在随后的代码中才可以使用它,也就是说,只有随后的代码才可以使用否则,如果未完全下载它,则会引发异常,您可以轻松处理

答案 1 :(得分:0)

我将下载到一个临时名称,然后在完成后重命名:

s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
keys = bucket.objects.all()
for key in keys:      
    item = key.key.split('/') 
    bucket.download_file(key.key + ".tmp","db/collecting/" + item[0] + ".csv")
    os.rename(key.key + ".tmp", key.key);

通过这种方式,在下载过程中,任何其他过程都不会“看到”文件,直到重命名发生为止。如果由于某种原因下载时间更长,那么可以覆盖直到准备就绪。