Как скачать файл snappy.parquet с s3 с помощью Boto в Python
Я новичок в этом, и я пытаюсь загрузить файл snappy.parquet из Amazon s3, который позже могу конвертировать в файл CSV. Я попытался работать со следующим примером, который я нашел в Интернете, и я получил пустую папку. Кто-нибудь может мне помочь, пожалуйста?
import boto
import sys, os
from boto.s3.key import Key
from boto.exception import S3ResponseError
DOWNLOAD_LOCATION_PATH =""
BUCKET_NAME = ""
AWS_ACCESS_KEY_ID= ""
AWS_ACCESS_SECRET_KEY = ""
conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_ACCESS_SECRET_KEY)
bucket = conn.get_bucket(BUCKET_NAME)
#goto through the list of files
bucket_list = bucket.list()
for l in bucket_list:
key_string = str(l.key)
s3_path = DOWNLOAD_LOCATION_PATH + key_string
try:
print ("Current File is ", s3_path)
l.get_contents_to_filename(s3_path)
except (OSError, S3ResponseError) as e:
pass
# check if the file has been downloaded locally
if not os.path.exists(s3_path):
try:
os.makedirs(s3_path)
except OSError as exc:
# let guard againts race conditions
import errno
if exc.errno != errno.EEXIST:
raise
1 ответ
Используемый вами скрипт рекурсивно загружает содержимое указанного сегмента S3 (BUCKET_NAME
) в указанный локальный каталог (DOWNLOAD_LOCATION_PATH
). FWIW, я заметил, что этот скрипт выглядит так, как будто он отсюда.
Выходная строка "Текущий файл..." должна показывать ход выполнения записи этих файлов. Одна из проблем, с которой вы можете столкнуться, связана с этой строкой:
s3_path = DOWNLOAD_LOCATION_PATH + key_string
Если бы вы указали DOWNLOAD_LOCATION_PATH
вверху как каталог без завершающего символа '/', например, так:
DOWNLOAD_LOCATION_PATH = '/tmp/my_dir'
тогда загружаемые файлы будут записаны не под /tmp/my_dir
каталог, но прямо в /tmp/
с my_dir
префикс на каждое имя файла! Вы можете исправить это, изменив эту строку на:
s3_path = os.path.join(DOWNLOAD_LOCATION_PATH, key_string)
Кроме этого, сценарий работает нормально. Вы можете добавить эту строку в самом верху:
from __future__ import print_function
если вы все еще используете Python 2.x, иначе вывод на печать будет выглядеть немного странно (print
будет думать, что вы печатаете 2-кортеж).
Ваш вопрос также звучит так, как будто вы действительно хотите / нуждаетесь в загрузке одного файла из корзины - если это так, это не очень хороший сценарий для использования, поскольку он загружает все.