os.listdir не работает: скрипт захватывает только имя файла, а не данные - PullRequest
0 голосов
/ 08 октября 2019

В настоящее время я работаю над сценарием для отправки различных файлов в корзину s3. Файлы успешно отправляются в корзину без проблем, но когда я открываю файлы, они не показывают никаких данных. Похоже, что эти файлы передали только фактические имена файлов (.ie file1.csv) в виде «строки», но не фактический .csv, содержащий какие-либо данные в пределах.

Примером ниже является каталогсодержит файлы, которые я отправил на свой s3:

/ home / user / Desktop /

file1.csv file2.csv file3.csv file4.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")

1 Ответ

0 голосов
/ 08 октября 2019

Вы просто передаете имя вашего файла на s3. Я думаю, что upload_file API будет служить вам лучше, чем put_object. Вы можете просто указать полный путь для upload_file, и он будет работать, вместо того, чтобы открывать файл и читать содержимое самостоятельно. Замените ваш метод put_object этим, и он должен работать.

s3.upload_file('/home/user/Desktop/'+file, BUCKET_NAME, key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...