【问题标题】:AWS Lambda - Combine multiple CSV files from S3 into one fileAWS Lambda - 将 S3 中的多个 CSV 文件合并到一个文件中
【发布时间】:2020-11-05 05:46:08
【问题描述】:

我正在尝试了解和学习如何将特定存储桶中的所有文件放入一个 csv 文件中。我有类似于日志的文件,并且始终采用相同的格式并保存在同一个存储桶中。我有这段代码可以访问它们并阅读它们:

bucket = s3_resource.Bucket(bucket_name)
for obj in bucket.objects.all():
    x = obj.get()['Body'].read().decode('utf-8')
    print(x)

它确实在特定文件和列标题之间分开打印它们。

我的问题是,如何修改循环以将它们放入一个 csv 文件中?

【问题讨论】:

  • 将 x 写入文件...或者直接调用它并将输出重定向到文件(即$ python my_script.py > output.csv
  • 还有一个问题,我怎样才能将 x 放入数据框中?

标签: python amazon-web-services aws-lambda


【解决方案1】:

您应该在/tmp/write 中创建一个文件,将每个对象的内容放入该文件中。

然后,当所有文件都被读取后,上传文件(或做任何你想做的事情)。

output = open('/tmp/outfile.txt', 'w')

bucket = s3_resource.Bucket(bucket_name)
for obj in bucket.objects.all():
    output.write(obj.get()['Body'].read().decode('utf-8'))
    
output.close

请注意,/tmp/ 目录中有 512MB 的限制。

【讨论】:

  • 再次感谢您。您知道如何在所有文件合并后删除重复项吗?我有这个代码,但由于列标题也是重复的,它们被删除了。我只想保持第一行不变?我的附加循环out = open('/tmp/outfile.txt', 'w' for line in lines_set: out.write(line) out.close
  • 您可以跳过除第一行之外的每个文件的第一行。使用变量来记住它是否是第一个文件。这只是每行读取文件的问题。见:Read a file line by line in Python - GeeksforGeeks
  • 再次感谢约翰!你知道我怎样才能真正将该对象更改为数据框吗?
  • “将该对象更改为数据框”是什么意思?
  • 我的意思是我的初始代码中的对象 x 被读取为数据框。我只需要在它返回 S3 之前进行一些清理。
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多