TypeError: ожидаемый объект str, bytes или os.PathLike, а не FieldFile - PullRequest
0 голосов
/ 26 января 2020

У меня есть эти листы Excel, которые я получаю из набора запросов в django rest framework. Я преобразовал это в список и хочу обработать файл Excel. Нужно ли хранить его где-нибудь в моем приложении перед чтением или будет хранить переменную и чтение будет работать нормально. Каков наилучший метод для достижения этой цели? Я попытался сделать это, но это, похоже, не работает.

excel_data =list(ExcelFiles.objects.all())
    print("excel_data", excel_data)
    for item in excel_data:
        print("item id ", item.id)
        print("item.company is ", item.company)
        print("item again", item.plan_type)
        print("item.excel is ", item.excelFile)
        print("item.status is" ,item.status)
        if item.status == False:
            if hasattr(item,'excelFile'):
                print(item.excelFile)
                excel_sheet=item.excelFile
                wb = xlrd.open_workbook(excel_sheet)// error occurs here
                sheet = wb.sheet_by_index(0)
                print("sheet", sheet)

Я использую xlrd.

Ответы [ 2 ]

0 голосов
/ 26 января 2020

FieldFile - это прокси-объект для доступа к сохраненному файлу на сервере. Из документов , FieldFile.name

Имя файла, включая относительный путь из root хранилища соответствующего FileField.

Таким образом, вы можете просто передать путь к файлу:

excel_sheet=item.excelFile
wb = xlrd.open_workbook(excel_sheet.name) # pass the path to the file instead
0 голосов
/ 26 января 2020

Мы понятия не имеем, что внутри ExcelFiles.objects.all(), ни ошибки у вас нет. Я бы сказал, что вы можете сделать две вещи:

  1. проверить, что такое item.excelFile, это ссылка? Поскольку вы не хотите его сохранять, лучше указывать ссылку на файл.

  2. xlrd должна иметь функцию, считываемую из ссылки, но это должно быть содержание URL , вы можете попробовать:

import requests
import xlrd
import urllib

link = 'https://raw.githubusercontent.com/SheetJS/test_files/a9c6bbb161ca45a077779ecbe434d8c5d614ee37/AutoFilter.xls'
file_name, headers = urllib.request.urlretrieve(link)
print (file_name)
workbook = xlrd.open_workbook(file_name)
print (workbook)

Ресурс: Откройте веб-сайт Excel с http, используя xlrd

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...