【问题标题】:Unable to write a CSV into Dropbox APP V2 - CSV appears blank无法将 CSV 写入 Dropbox APP V2 - CSV 显示为空白
【发布时间】:2020-06-25 08:24:32
【问题描述】:

我正在尝试将脚本的输出 (pandas df) 上传到 Dropbox 文件夹,但在 Dropbox 中创建的 csv 文件显示为空白。

dbx.files_upload(cvd_tracker.to_csv("Trial.csv"),'/Trial.csv')

我猜 .to_csv() 在这里不适用,但我不知道该怎么做。我查过了,“cvd_tracker”数据框里面确实有数据。

使用 StringIO 也失败了。

from io import StringIO
csv_buffer = StringIO()
cvd_tracker.to_csv(csv_buffer)

dbx.files_upload(csv_buffer.getvalue(),'/Trial3.csv')

【问题讨论】:

    标签: python pandas export-to-csv dropbox dropbox-api


    【解决方案1】:

    dbx.files_upload 有两个必需参数,第一个是类文件对象或类字节对象,第二个是用户的保管箱中保存文件的路径。您的第二个参数看起来不错,但您的第一个参数不正确 - 如果传递给它的第一个参数是 Nonepandas.Dataframe.to_csv 返回一个字符串,或者如果第一个参数不是 None,它返回 None。您传递给cvd_tracker.to_csv 的第一个(也是唯一一个)参数是"Trial.csv",因此cvd_tracker.to_csv("Trial.csv") 返回None。这意味着基本上你在做dbx.files_upload(None, "/Trial.csv")

    要获得所需的结果,只需删除传递给cvd_tracker.to_csv 的参数,以便它返回一个字符串。然后您需要使用str.encode 将字符串转换为类似字节的对象,以便dbx.files_upload 可以接受它。它看起来像这样:

    dbx.files_upload(cvd_tracker.to_csv().encode(), "/Trial.csv")

    【讨论】:

    • 如果我删除 to_csv 的参数,我得到一个错误。 >> TypeError: 预期 request_binary 为二进制类型,得到
    • /usr/local/lib/python3.6/dist-packages/dropbox/dropbox.py in request_json_string(self, host, func_name, route_style, request_json_arg, request_binary, timeout) 520 # 请求失败并且需要稍后重试。 521 raise TypeError('expected request_binary as binary type, got %s' % --> 522 type(request_binary)) 523 524 # 完全限定的主机名 TypeError: expected request_binary as binary type, got
    • @HemanshuDas 我发现另一个文档表明dbx.files_upload 实际上并不接受字符串,而是一个类似字节的对象。试试这个:dbx.files_upload(cvd_tracker.to_csv().encode(), "/Trial.csv")
    • 瞧!这样可行。你是救生员。非常感谢。您介意更新答案以造福他人吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多