filename变量用于获取最新文件的名称。我的目标是监视文件夹,每当检索到新文件时,使用boto3自动将其上载到s3 bucket。
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from subprocess
import call
import os
import boto3
会话=BOT3。会话(aws\u access\u key\u id='aws\u access\u key\u id',aws\u secret\u access\u key='aws\u secret\u access\u key',region\u name='region\u name')
s3=会话。客户端(“s3”)
class Watcher:
def __init__(self):
self.dir = os.path.abspath('D:\\project')
self.observer = Observer()
def run(self):
event_handler = Handler()
self.observer.schedule(event_handler, self.dir, recursive=True)
self.observer.start()
try:
while True:
time.sleep(5)
except:
self.observer.stop()
print("Error")
self.observer.join()
class Handler(FileSystemEventHandler):
@staticmethod
def on_any_event(event):
if event.is_directory:
return None
elif event.event_type == 'created':
print("Received created event - %s." % event.src_path)
s3.upload_file(Filename=event.src_path, bucket='bucketname, key=test-file-1)
if __name__ == '__main__':
w = Watcher()
w.run()
FileNotFoundError:[WinError 2]系统找不到指定的文件
不确定您这样做是否是为了学习python(boto3)。如果是,恭喜。如果不是,AWS已经提供了这样的功能。所以你把所有的东西都保留在代码中,但要向AWS CLI付费。
正如@alexhall在评论中提到的,s3。元。客户upload\u file方法将上载文件。您可以在此处阅读boto3 s3客户端的上载方法文档:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_file.然而,这是一个有点愚蠢的例子,因为他们首先创建一个s3资源而不是s3客户端,然后因为s3资源实际上没有上载文件的方法,所以他们返回到s3客户端。您也可以直接创建并使用s3客户端进行上传。
您还依赖于这样一个事实,即当您像以前那样创建s3资源时,boto3使用默认会话:
boto3.resource('s3')
如果您在lambda上运行代码,或者如果您在ec2实例中配置了IAM角色以访问s3,那么这将很好,但我认为您是在AWS之外运行此代码,在这种情况下,您可以使用boto3。首先使用凭据创建会话(),然后客户端(或资源)可以使用该会话。
aws_access_key_id = '<AWS_ACCESS_KEY_ID>'
aws_secret_access_key = '<AWS_SECRET_ACCESS_KEY>'
region_name = 'us-east-1'
session = boto3.Session(aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name=region_name)
s3 = session.client('s3')
您可以在此处阅读有关会话配置的信息:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html
而不是命令= 行,您只需使用:
s3.upload_file(Filename, Bucket = 'aaaaa', Key='test-file-1')
您可以删除最后一行。如果您运行的是OS/System命令而不是python中的某个东西,您会“调用”。
我有一个带有文件输入字段的表单: 然后我做的东西与此图像文件提交: 我要保存图像的目录名为,与上面的目录相同。 您可能会注意到,在上面我在类insertBlog`的代码是: 当用户填写表单时,除了图像信息之外,它还将所有其他信息正确地存储在MySQL表中。此外,它不会将实际图像存储在文件夹中。那么,如何让这个脚本将图像上传到文件夹,并将其路径存储在mysql表中呢。目前,它没有将图像存储在数据库中
问题内容: 我正在尝试编写脚本以从Python中FTP服务器的最新子目录获取最新文件。我的问题是我无法找出最新的子目录。有两个选项可用,子目录具有ctime可用。在目录名称中还提到了日期,即在哪个日期创建了目录。但是我不知道如何获取最新目录的名称。我想出了以下方法(希望服务器端按最新的ctime排序)。我已经按照以下方式进行了操作,如果第一个对象是最新目录,它将可以正常工作。 但是,有什么方法可以
问题内容: 我编写了一些代码,这些代码将搜索目录并在列表框中显示文件。 我什至尝试过: 我虽然出错了… 好的,它说的Users\Hunter很好,当人们获得我的软件时,名字就没有猎人了。那么,我该如何将其命名为任何用户的下载文件夹? 问题答案: WinAPI方法SHGetKnownFolderPath是检索特殊文件夹(包括个人文件夹和下载文件夹)路径的唯一正确方法。 还有其他方法可以获得相似的结果
问题内容: 我在文档文件夹中获取文件名的代码有什么问题? 我以为我已正确阅读了文档,并且我对documents文件夹中的内容非常确定,但是“ fileList”没有显示任何内容?“目录”显示文件夹的路径。 问题答案: 此解决方案适用于 Swift 4 (Xcode 9.2)和 Swift 5 (Xcode 10.2.1+): 这是一个可重用的FileManager扩展,它还允许您跳过或在结果中包含
问题 你想获取文件系统中某个目录下的所有文件列表。 解决方案 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.listdir('somedir') 结果会返回目录中所有文件列表,包括所有文件,子目录,符号链接等等。 如果你需要通过某种方式过滤数据,可以考虑结合 os.path 库中的一些函数来使用列表推导。比如: import os.pa
在Python中,我应该使用什么命令来获取包含我正在处理的文件的文件夹的名称? 这里就是我想要得到的。 我唯一想到的是使用两次: 还有更好的方法吗?