python - os.listdir 不工作:脚本只抓取文件名而不是数据
问题描述
我目前正在编写一个将各种文件发送到 s3 存储桶的脚本。文件成功发送到存储桶没有问题,但是当我打开文件时,它们没有显示任何数据。这些文件似乎只将实际文件“名称”(.ie file1.csv)作为“字符串”传输,而不是包含任何数据的实际 .csv。
下面的示例是包含我发送到我的 s3 的文件的目录:
/home/用户/桌面/
文件 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)
推荐阅读
- c++ - 将复数向量展平并还原为双向量并返回
- django - 仅在 django_crispy_from 中显示输入?
- hadoop - HDPCD 模拟器
- sql - 如何修复 SQL 查询中的数据排序错误?
- html - 将鼠标悬停在按钮上,带删除线的文本
- go - 通过反射提取通用结构值
- android-studio - 如何在 Android Studio 中更新 Gradle 插件
- python - 如何让flask-python应用程序使用heroku重定向到https而没有太多重定向错误?
- postgresql - SQL 数据库操作错误 - 没有这样的表:用户
- python - Pandas 中的 Groupby 对象到 Seaborn 情节:有简单的方法吗?