[英]os.listdir not working: script only grabs file name and not data wtihin
我目前正在编写一个将各种文件发送到 s3 存储桶的脚本。 文件成功发送到存储桶没有问题,但是当我打开文件时,它们没有显示任何数据。 这些文件似乎只将实际文件“名称”(.ie file1.csv)作为“字符串”传输,而不是包含任何数据的实际.csv。
下面的示例是包含我发送到我的 s3 的文件的目录:
/home/用户/桌面/
文件1.csv 文件2.csv 文件3.csv 文件4.Z628CB5675FF524F83E719B7AAFZE
如何更新我的代码以发送
import fnmatch
import os
import glob
import boto3
from botocore.client import Config
ACCESS_KEY_ID = 'some_key'
ACCESS_SECRET_KEY = 'some_key'
BUCKET_NAME = 'isome_bucket'
s3 = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY,
config=Config(signature_version='s3v4')
)
for file in os.listdir('/home/user/Desktop/'):
if fnmatch.fnmatch(file, '*.csv'):
key = "folder_1/" + file
s3.put_object(Bucket=BUCKET_NAME, Key=key, Body=file)
print("Complete")
您只是将文件名传递给 s3。 我认为upload_file API 会比put_object 更好地为您服务。 您可以简单地传递 upload_file 的完整路径,它会起作用,而不必自己打开文件并阅读内容。 用这个替换你的 put_object 方法,它应该可以工作。
s3.upload_file('/home/user/Desktop/'+file, BUCKET_NAME, key)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.