社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

上传焦油。gz文件到S3 Bucket,使用Bot3和Python

Deb • 3 年前 • 1099 次点击  

我装不上焦油。gz文件从我的本地目录到S3存储桶位置。我在运行下面的函数来上传任何csv文件时没有遇到问题,但我收到了错误:“Fileobj必须实现读取”错误。我正在使用Boto3和Python

tar_文件是本地驱动器上要上传到S3存储桶位置的文件

import csv
import glob
import os
import tarfile
from datetime import date
from typing import Optional, Set
from io import BytesIO

import psycopg2
import boto3

from constants import (
    ARTIFACT_STORE,
    DB_HOST,
    DB_PASSWORD,
    DB_USER,
    EXCLUDED_TABLES,
    NIPR_DB_NAME,
    S3_ACCESS_KEY_ID,
    S3_SECRET_ACCESS_KEY,
    S3_ENDPOINT_URL,
    BUCKET_NAME
)

def upload_s3_file():
    tar_file = f"{ARTIFACT_STORE}/{date.today()}_cds.tar.gz"
    s3 = boto3.client('s3',endpoint_url=S3_ENDPOINT_URL,aws_access_key_id=S3_ACCESS_KEY_ID,aws_secret_access_key=S3_SECRET_ACCESS_KEY)
    with tarfile.open(tar_file,'r:gz') as tar:
        s3.upload_fileobj(tar,BUCKET_NAME,tar_file)

当我在S3存储桶的csv生成文件上运行以下函数时,我没有问题:

s3 = boto3.client('s3',endpoint_url=S3_ENDPOINT_URL,aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY)
with open("test.csv", "rb") as f:
        s3.upload_fileobj(f,BUCKET_NAME, "test")
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132480
 
1099 次点击  
文章 [ 1 ]  |  最新文章 3 年前
ewong
Reply   •   1 楼
ewong    3 年前

问题是你应该把一个文件对象传递给 upload_fileobj 而不是tarfile对象。

with open(tar_file,'rb') as tar:
    s3.upload_fileobj(tar,BUCKET_NAME,tar_file)