【问题标题】:Boto3 upload to S3: cut off last few rows of data from a .csv fileBoto3 上传到 S3:从 .csv 文件中截取最后几行数据
【发布时间】:2019-10-10 23:03:35
【问题描述】:

当我使用 boto3 (Python) 上传 .csv 文件时,最后几行数据被截断。文件大小为 268KB,对于非分段上传来说应该不会太大。这是我的代码:

import boto3 
s3 = boto3.client('s3') 
s3 = boto3.resource('s3')
s3.meta.client.upload_file(report_file.name, 'raw-data-bucket', 'Reports/report.csv') 

*这些不是我使用的确切存储桶和路径,但在这种情况下它们可能无关紧要

任何帮助都将不胜感激。

【问题讨论】:

    标签: python csv amazon-s3 boto3


    【解决方案1】:

    在使用 .upload_file() 之前,您是否关闭了要上传到 S3 的文件?我的 *.CSV 文件上传时遇到了完全相同的问题,并通过在上传之前明确关闭每个文件来解决它,问题就解决了。不再有截断的 *.CSV 文件。

    【讨论】:

      【解决方案2】:

      看起来这个人也有同样的问题

      256kb stackoverflow similar problem

      此外,他们在 boto3 here 中提供了多上传部分

      【讨论】:

      • 我读过这篇文章并在问我的问题之前尝试过,但它并没有真正帮助我。对于这种大小的文件,我不需要分段上传。另外我不确定如何检查我的文件是否获得 base64 编码/解码。
      【解决方案3】:

      坚持一项服务(资源或客户端)。

      # Using boto3 service client
      import boto3 
      s3 = boto3.client('s3') 
      s3.upload_file('your_local_file_path", 'bucket_name', 'prefix_filename_to_s3') 
      

      对于服务资源

      import boto3 
      s3 = boto3.resource('s3')
      s3.Object('bucket_name', 'you_local_file_path').upload_file('prefix_filename_to_s3')
      

      再次检查“report_file.name”的内容。 S3.upload_file 作为 GIGO(garbage in garbage out)工作,它不会截断数据。

      (更新) 经过进一步检查,there is another case 我不确定它们是否相关。有人建议使用 httppretty 模块 boto3 不是线程安全的,您应该更新您的 boto3 版本并禁用线程。

       from boto3.s3.transfer import TransferConfig
          config = TransferConfig(use_threads=False)
          client.download_file(Bucket="mybucket",
            Key="foo/bar.fastq.gz", Filename="bar.fastq.gz", Config=config)
      

      【讨论】:

      • 我只是尝试了两种方法,但我仍然缺少最后 30 行数据。当我在本地下载数据时,一切都很好。我还尝试以不同的格式(CSV、XLSX、TSV)下载和上传,上传到 s3 时数据仍然被剪切。如果我手动将其上传到s3,则数据很好。使用 boto3 上传时丢失数据的原因可能是什么?
      • @Inna 你的 boto3 版本是什么?即pip freeze | grep "boto3"
      • 我通过终端运行代码时的版本是 boto3==1.4.4 botocore==1.5.65 当我通过集群运行脚本时也遇到了同样的问题boto==2.39.0 botocore==1.4.46
      • @Inna 请尝试更新的建议。尝试记录下行为以确认真正的罪魁祸首,例如一世。使用 boto3 上传,使用 AWS CLI 下载,比较文件 ii。使用 AWS CLI 上传,使用 boto3 下载,比较文件
      • 我刚刚尝试使用 tinys3 上传,最后 30 行仍然丢失。所以问题不在于boto3,我想我和[256kb stackoverflow类似问题](stackoverflow.com/questions/38678578/…)有同样的问题。我对base64编码和解码不太了解,所以我不太确定如何测试。
      猜你喜欢
      • 2021-07-13
      • 2018-05-05
      • 1970-01-01
      • 2018-06-08
      • 2018-01-23
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多