Читайте CSV-файл в Dropbox, не загружая его - PullRequest
0 голосов
/ 24 сентября 2018

Я занимаюсь разработкой приложения, в котором пользователь может просто указать путь к файлу выпадающего списка, получить токен доступа и просмотреть содержимое файла.Можно ли просто прочитать содержимое файла без его фактической загрузки.

import dropbox
import tempfile
import csv

dbx = dropbox.Dropbox(<access_token>)

metadata, f = dbx.files_download('/test/MOCK_DATA.csv')

filename = tempfile.NamedTemporaryFile(suffix='.csv').name

with open(filename, 'wb') as file:
  file.write(f.content)

with open(filename) as file:
  csv_reader = csv.reader(file, delimiter=',')
line_count = 0
for row in csv_reader:
  if line_count == 0:
    print(f'Column names are {", ".join(row)}')
    line_count += 1
  else:
    print(row)
    line_count += 1
print(f'Processed {line_count} lines.')

В настоящее время я могу читать содержимое, но только после его загрузки.

1 Ответ

0 голосов
/ 25 сентября 2018

Использование files_download - это правильный способ доступа к данным файла с помощью Dropbox Python SDK.Затем в своем коде вы записываете данные файла в локальный файл, но это не обязательно.

Метод csv.reader задокументирован как:

csvfile может быть любым объектом, который поддерживает протокол итератора и возвращает строку каждый раз, когда вызывается его метод next () - файловые объектыи список объектов оба подходят.

Таким образом, вы можете сделать что-то вроде этого:

import dropbox
import csv

dbx = dropbox.Dropbox(<access_token>)

metadata, f = dbx.files_download('/test/MOCK_DATA.csv')

csv_reader = csv.reader(f.content.decode().splitlines(), delimiter=',')

line_count = 0
for row in csv_reader:
    if line_count == 0:
        print(f'Column names are {", ".join(row)}')
        line_count += 1
    else:
        print(row)
        line_count += 1

print(f'Processed {line_count} lines.')
...