os.listdir 不起作用:脚本只抓取文件名,而不抓取数据 wtihin



我目前正在编写一个脚本,用于将各种文件发送到 s3 存储桶。文件成功发送到存储桶没有问题,但是当我打开文件时,它们没有显示任何数据。这些文件似乎只将实际的文件"名称"(.即file1.csv(作为"字符串"传输,但没有包含任何数据的实际.csv。

下面的示例是一个包含我发送到 s3 的文件的目录:

/首页/用户/桌面/

文件1.csv 文件2.csv 文件3.csv 文件4.csv

如何更新要发送的代码

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)

最新更新