【问题标题】:filter out empty files when copying between s3 buckets在 s3 存储桶之间复制时过滤掉空文件
【发布时间】:2021-07-17 07:21:52
【问题描述】:

我正在使用 python boto3 在跨账户 s3 存储桶之间复制 txt 文件。我正在将文件读取到熊猫数据框以进行一些清理。我注意到很多文件都是空的。有没有办法在复制之前过滤掉0B文件。

谢谢!

【问题讨论】:

  • 您是在寻找在下载前检查 s3 大小的选项,还是希望在下载特定文件后稍后再检查?
  • 您能否向我们展示您的代码,以便我们了解如何您正在复制文件?
  • @SundeepPidugu 从 S3 下载后我更喜欢

标签: python pandas amazon-web-services amazon-s3 boto3


【解决方案1】:

您可以创建存储桶中所有文件的列表并排除大小为 0 的文件。一种方法是 t0 使用以下内容:

  1. 列出存储桶中的所有文件及其大小:
session  = Session(aws_access_key_id = ACCESS_KEY, aws_secret_access_key = SECRET_KEY)
s3       = session.resource('s3')
bucket   = s3.Bucket(bucket_name_string)
my_files = []
file_size = []
for s3_file in bucket.objects.all():
     my_files.append(s3_file.key)
     file_size.append(s3_file.size)
  1. 使用此信息制作数据框
df = pd.DataFrame(
    {'file name': my_files,
     'file size': file_size
    })

这将返回类似:

                                           file name  file size
0                                            apc/daily/          0
1           apc/daily/2021/1/dagsrapport-2021-01-18.csv       1498
2           apc/daily/2021/1/dagsrapport-2021-01-19.csv       1498
3           apc/daily/2021/1/dagsrapport-2021-01-20.csv       1500
4           apc/daily/2021/1/dagsrapport-2021-01-21.csv       1498
...                                                 ...        ...
7829  apc/vehicles/2021/4/814/0814-2021-04-19T020101...         70
7830  apc/vehicles/2021/4/814/0814-2021-04-20T020131...       8741
7831  apc/vehicles/2021/4/814/0814-2021-04-21T020128...       8719
7832  apc/vehicles/2021/4/814/0814-2021-04-22T020127...       7337
7833  apc/vehicles/2021/4/814/0814-2021-04-23T020117...       9292
  1. 选择您想要的尺寸:
df_non_empty = df[df['file size']>0]
List_non_empty = df_non_empty['file name'].to_list()
  1. 使用此列表选择这些文件以在存储桶之间传输 och 副本。

【讨论】:

  • 谢谢!这工作得很好,我现在可以将 > 0B 的文件复制到我的目标存储桶。
  • 很高兴它有帮助!
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2018-01-06
  • 2018-01-01
  • 2017-11-23
相关资源
最近更新 更多