TypeError:预期的str,字节或os.PathLike对象,而不是FieldFile

时间:2020-01-26 16:56:27

标签: python django excel

我有这些excel工作表,这些工作表是我从Django rest框架中的queryset获取的。我将其转换为列表并希望处理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 :(得分:0)

我们不知道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)

资源:Open an excel from http website using xlrd

答案 1 :(得分:0)

FieldFile是用于访问服务器上存储的文件的代理对象。从docs的FieldFile.name

文件名,包括从相关FileField的存储根开始的相对路径。

因此您可以简单地将路径传递到文件:

excel_sheet=item.excelFile
wb = xlrd.open_workbook(excel_sheet.name) # pass the path to the file instead