python - 在 Sequence Python-AWS 中读取文件
问题描述
我在 S3 存储桶中有一些文件夹,其中有文件。由于 S3 像 unix 系统一样存储数据,因此文件夹编号的顺序是 1,10,11,12,2,3 而不是 1,2,3,10,11,12..
我想按顺序读取文件夹 1,2,3,10,11,12.. 然后读取其中的文件..
我附上了一个片段以及我正在尝试的代码,但它没有按我想要的方式工作。如您所见,文件夹名称有一个数字(-0.png-analysis,-1.png-analysis,-10.png-analysis,-11.png-analysis,-2.png-analysis),但排序不正确.. 有没有办法按 0、1、2、3、10、11 的顺序读取它们?
for i in bucket.objects.all():
#print(i.key)
if i.key.endswith('tables.csv'):
#s = i.key.split('-')[2]
print(i.key.split('/')[1])
#print(sorted(s,key = lambda x: x.split('.')))
#p = i.key.split('-')[2]
#print(p)
解决方案
正如我所说,使用它们的序列号作为字典中的键存储所有对象并在此字典上迭代。
这是它的样子
import boto3
import collections
s3 = boto3.client('s3')
my_dict = {}
for obj in bucket.objects.all():
if obj.key.endswith('tables.csv'):
my_dict[int(obj.key.split('/')[1].split('-')[2].split('.')[0])] = obj.key
print(my_dict)
od = collections.OrderedDict(sorted(my_dict.items()))
for k,v in od.items():
csv_obj = s3.get_object(Bucket='bucket', Key=v)
print(csv_obj['Body'].read().decode('utf-8'))
注意:我假设您没有任何两个具有相同序列的文件,因为这只会获取具有该序列号的最新文件,并且您将无法检索以前的文件。
从https://stackoverflow.com/a/9001529/9387017复制的 OrderedDict
推荐阅读
- python - TypeError:“枚举”类型的对象没有 len()
- android - Android WebView 无法加载 URL
- azure - 如何在 DataFactory 中获取 CSV 的第一行和第一列值?
- r - 使用 rChart 包中的 nplot 时如何将标签添加到 x 轴
- angular - Angular 8:将表单标记为从父组件触摸
- flutter - sweepGradient 终点没有动画
- javascript - 我正在尝试在 electronjs 上打印页面,但是当我按照复制代码时它不会打印或给出任何错误
- c# - 使用 C# 从 Outlook 2016 电子邮件项目捕获或导入收件人、发件人、主题和电子邮件正文
- .net - 如何在特定应用程序上禁用 BrotliCompressionModule
- sql - 如何获取 PostgreSQL 表中的相关数据?