如何用Boto与Python判断AWS S3中的Key是文件还是文件夹
判断AWS S3中Key是文件还是文件夹(Boto + Python)
嘿,我来帮你搞定这个问题!你说得太对了——S3根本没有传统文件系统里那种真正的文件夹,那些看起来像文件夹的东西,要么是以/结尾的空Key对象,要么纯粹是因为有文件路径包含这个前缀才“看起来像”文件夹。
你不用再额外创建Key对象啦!srcBucket.list()返回的每个obj本身就是Key实例,直接访问它的key属性就能拿到完整的路径字符串。然后就可以用你想到的方法:通过判断这个字符串是否以/结尾来区分文件和“文件夹”。
修改后的代码可以这样写:
for obj in srcBucket.list(): # 直接获取Key的路径字符串 key_path = obj.key # 判断是否为文件:不以/结尾 if not key_path.endswith('/'): print(f"文件: {key_path}") else: print(f"文件夹/前缀: {key_path}")
举个例子,你提到的两个Key:
<Key: my-folder,output/2019/01/28/>对应的key属性是output/2019/01/28/,以/结尾,会被判定为“文件夹”<Key: my-folder,output/2019/01/28/part_1111>对应的key属性是output/2019/01/28/part_1111,不以/结尾,会被判定为文件
另外补充个小细节:有些时候S3的“文件夹”是手动创建的空对象,有些则是因为存在子路径文件自动生成的前缀,但这个判断逻辑在两种场景下都能正常工作,完全满足你的需求~
内容的提问来源于stack exchange,提问作者Richlewis
相关产品推荐
相关产品推荐

