我想將我的日志上傳到我的存盤桶我從未使用過 python 和 boto3 這是我的代碼
import os
import datetime as dt
import boto3
x = dt.datetime.now()
date = x.strftime("%Y%m%d")
bucket = 'mybucket'
dir_path = "/log"
s3 = boto3.client('s3')
def log():
global dir_path
for (dir_path, dir, files) in os.walk(dir_path):
for file in files:
if date in file:
file_path = os.path.join(dir_path, file)
print file_path
file_name = (log())
key = (log())
res = s3.upoad_file(file_name, bucket, key)
這是結果
log1
log2
log3
log4
Traceback *most recent call last):
File "test2.py", line 21, in <module>
res = s3.upload_file(file_name, bucket, key)
File "home/user/.local/lib/python2.7/site-packages/boto3/s3/tranfer.py", line 273, in upload_file extra_args=ExtraArgs, callback=Callback)
File "home/user/.local/lib/python2.7/site-packages/boto3/s3/tranfer.py", line 273, in upload_file raise ValueError('Filename must be a string')
ValueError: Filename must be a string
我有 4 個日志檔案
請幫我解決它?
uj5u.com熱心網友回復:
由于您需要上傳多個檔案,并且您宣告upload one log有效,您可以執行以下操作,基本上按照您的初衷遍歷目錄串列,然后對于滿足該條件的每個檔案項(date in file),它回傳呼叫回圈的檔案路徑。
import os
import datetime as dt
import boto3
x = dt.datetime.now()
date = x.strftime("%Y%m%d")
bucket = 'mybucket'
dir_path = "/log"
s3 = boto3.client('s3')
def log(in_path):
for (dir_path, dir, files) in os.walk(in_path):
for file in files:
if date in file:
yield os.path.join(dir_path, file)
for file_name in log(dir_path):
res = s3.upload_file(file_name, bucket, file_name)
請注意,如果您需要跟蹤結果,則可以進行如下更改:
.
.
.
results = {}
for file_name in log(dir_path):
results[file_name] = s3.upload_file(file_name, bucket, file_name)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/512554.html
上一篇:按版本檢索已洗掉的AWSS3檔案
