无法使用 Python 脚本和通配符将多个文件上传到 AWS S3

博帕克

我刚开始使用 python 和 AWS。

我试图通过 python 脚本将具有特定格式的各种文件“并且通常”从我的本地电脑移动到 S3 AWS 文件夹。我在脚本中实现通配符以一次捕获各种文件时遇到问题。我可以使用字符串 "data = open('file_example_here.csv', 'rb')" 一次移动一个文件,尽管我一直在调整我的 python 脚本以捕获所有文件(即 .csv 或所有 .json文件)。下面详细介绍了一组示例文件,因此,如果我想在脚本中使用通配符将所有 .json 文件移动到我的 s3 实例,我该如何调整脚本以处理该问题?

任何帮助将不胜感激,下面分享实现。


/home/user/folder1/c_log_1-10-19.csv
/home/user/folder1/c_log_2-10-19.csv
/home/user/folder1/c_log_3-10-19.csv
/home/user/folder1/c_log_4-10-19.csv
/home/user/folder1/c_log_5-10-19.csv
/home/user/folder1/c_log_6-10-19.csv

/home/user/folder1/h_log_1-11-18.json
/home/user/folder1/h_log_2-11-18.json
/home/user/folder1/h_log_3-11-18.json
/home/user/folder1/h_log_4-11-18.json
/home/user/folder1/h_log_5-11-18.json
/home/user/folder1/h_log_6-11-18.json

import boto3
from botocore.client import Config

ACCESS_KEY_ID = 'key_id_here'
ACCESS_SECRET_KEY = 'secret_key_here'
BUCKET_NAME = 'bucket_name_here'

data = open('test_file.csv', 'rb')

s3 = boto3.resource(
    's3',
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=ACCESS_SECRET_KEY,
    config=Config(signature_version='s3v4')
)
s3.Bucket(BUCKET_NAME).put_object(Key='folder_test/folder_test_2/test_file.csv', Body=data)

print ("All_Done")


````````````````````````````````````````````````````
################################################
############## UPDATED CODE BELOW ############
################################################
import glob
import boto3
from botocore.client import Config

ACCESS_KEY_ID = 'some_key'
ACCESS_SECRET_KEY = 'some_key'
BUCKET_NAME = 'some_bucket'

#session = boto3.Session(profile_name='default')
s3 = boto3.resource(
    's3',
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=ACCESS_SECRET_KEY,
    config=Config(signature_version='s3v4')
)

csv_files = glob.glob("/home/user/Desktop/*.csv")
#json_files = glob.glob("/home/user/folder1/h_log_*.json")

for filename in csv_files:
    print("Putting %s" % filename)
    s3.upload_file(filename, BUCKET_NAME, filename)

#for filename in json_files:
#    print("Putting %s" % filename)
#    s3.upload_file(filename, BUCKET_NAME, filename)

s3.Bucket(BUCKET_NAME).put_object(Key='folder1/folder1', Body=csv_files)

print("All_Done")

阿什曼金并

您可以使用像 Python 的glob模块这样简单的东西来查找与指定模式匹配的所有文件,如下例所示:

#!/usr/bin/env python

import glob
import boto3
import os

BUCKET_NAME = 'MyBucket'
FOLDER_NAME = 'folder1/folder1'

session = boto3.Session(profile_name='default')
s3 = session.client('s3')

csv_files = glob.glob("/home/user/folder1/c_log_*.csv")
json_files = glob.glob("/home/user/folder1/h_log_*.json")

for filename in csv_files:
    key = "%s/%s" % (FOLDER_NAME, os.path.basename(filename))
    print("Putting %s as %s" % (filename,key))
    s3.upload_file(filename, BUCKET_NAME, key)

for filename in json_files:
    key = "%s/%s" % (FOLDER_NAME, os.path.basename(filename))
    print("Putting %s as %s" % (filename,key))
    s3.upload_file(filename, BUCKET_NAME, key)

print("All_Done")

上面的代码假设您安装了 AWS CLI,并在默认配置文件下配置了访问密钥。如果没有,您可以使用boto3进行身份验证的各种方法

可能有一种更 Pythonic 的方法来做到这一点,但这个简单的脚本有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Java将AWS文件上传到S3

如何使用Java Apache HttpClient将文件上传到公共AWS S3存储桶

使用Python从AWS S3下载文件

如何使用AWS AppSync将文件上传到AWS S3

使用Skipper将Sails.js文件上传到AWS S3

Laravel和AWS PHP SDK-将本地文件上传到S3后无法删除

使用AWS4 Auth通过bash将文件上传到s3?

使用NodeJS将多个文件上传到AWS S3

使用Retrofit2将文件上传到AWS S3预签名URL

如何使用kms加密将文件从AWS cli上传到s3

无法使用IAM角色凭据使用Python将文件上传到S3

无法将pdf文件上传到AWS s3存储桶-PHP

无法上传到AWS S3

Python-无法将文件上传到AWS S3存储桶中的已定义文件夹

如何使用aws-sdk同步将文件上传到S3?

使用Java AWS SDK将文件夹上传到S3存储桶

使用NodeJS将ffmpeg文件输出上传到AWS s3

将文件从AWS Lambda(Python)中的多部分/表单数据上传到S3

AWS仅使用ID和密钥将文件上传到S3服务器

使用NodeJS和AWS S3将损坏/截断的mp4上传到S3存储桶

使用 Ruby 将文件上传到 S3 时出现 Aws::Errors::MissingRegionError

使用 AWS SDK ASP.NET 将文件上传到 S3

使用 boto3(python 3.x) 将文件上传到 aws s3 存储桶以保持文件结构?

如何使用 python 3.8 将文件上传到 AWS S3 子文件夹?

使用 multer 将多个图像上传到 AWS S3

使用 ReactJs 将大文件(视频)上传到 nodejs 服务器和 aws s3

无法使用 python 将数据附加到 AWS S3 中的现有 csv 文件

使用 AWS S3 v/s S3 Glacier 上传将文件上传到 Glacier

使用 react-aws-s3 将 csv 文件上传到 S3