【问题标题】:how to read csv file from dropbox as a dictionary (as read from csv.DictReader() )?如何从保管箱中读取 csv 文件作为字典(从 csv.DictReader() 读取)?
【发布时间】:2018-03-16 13:38:43
【问题描述】:

我正在尝试使用

从 Dropbox 中读取 csv 文件

md, res = dbx.files_download(路径)

在此link 中推荐
这是我正在尝试阅读的 csv:csv_file_image
来自res.content,我从 csv 文件中获取数据,该文件形状丑陋。
有什么方法可以读取更多形状的数据,例如使用:

import csv
with open(file) as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['name'])

我想将 csv 文件作为字典读取,但我得到的只是数据:response_data_image

【问题讨论】:

  • 文档说“csvfile 可以是任何支持迭代器协议的对象”,因此将 Dropbox 内容转换为它支持的内容应该很容易吗?当您说“我得到的只是原始数据”时,您的意思是从哪里来的?
  • 我不应该使用原始数据这个词。当我尝试使用 csv.DictReader 读取“res.content”时,出现导入错误,也出现“FileNotFoundError”并打印 res.content 中的数据。
  • @Rup 我已经编辑了问题并添加了屏幕截图。
  • 哦 - 你不想成为 open()ing res.content 因为那不是磁盘上的文件。 (或者,如果您只需要快速修复,您可以将其写入文件并打开它。)但最好的方法是将其转换为您可以传递到 csv.DictReader 的格式,而无需先尝试 open()。如果它是单个字符串,那么这可能就像通过换行符拆分它一样简单,但我不确定(它是什么或如何最好地处理它。)
  • 感谢您的帮助。它引导我找到解决方案。

标签: python-3.x csv dictionary dropbox-api


【解决方案1】:

我通过将 res.content 转换为可迭代的 obj 找到了这个解决方案:

import csv
import dropbox

path = '' # file path which is needed to be read
dbx = dropbox.Dropbox('YOUR_ACCESS_TOKEN')
md, res = dbx.files_download(path)
data = res.content # data in ugly shape
# Now data is needed to be decoded from bytes to unicode and then str.split()
data = data.decode('utf-8')
data = data.split('\n')
# Now data is an iterable object, so csv.DictReader can be used
reader = csv.DictReader(data)
# Loop to get data using key value from reader dict
for row in reader:
    row['nameen']    # 'nameen' is the key value in my case

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2023-01-08
    • 2017-03-26
    • 1970-01-01
    • 2019-05-27
    • 2017-12-11
    相关资源
    最近更新 更多