繁体   English   中英

os.listdir 不工作:脚本只抓取文件名而不是数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM