我需要从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")
答案 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);
通过这种方式,在下载过程中,任何其他过程都不会“看到”文件,直到重命名发生为止。如果由于某种原因下载时间更长,那么可以覆盖直到准备就绪。