我已经设置了一个脚本来处理用户上传的excel文件。当文件存储在本地磁盘上时,脚本工作得很好。
from openpyxl import load_workbook
wb = load_workbook("file_path.xlsx") # Load workbook from disk works fine
ws = wb.worksheets[0]然后我设置了django-storages,允许用户上传的文件存储在数字海洋空间中。
我现在的问题是如何访问和处理云存储的文件。根据记录,如果我将文件URL传递给load_workbook,它将失败,并显示错误No such file or directory: file_url。
是否必须使用requests下载文件,然后将其作为本地文件进行处理?感觉效率低下?我有什么选择?
发布于 2019-05-17 20:45:43
您可以获取文件的字节内容,将其包装在ContentFile中,并将其传递给openpyxl。假设您的模型为FileContainer,字段名称为file
from django.core.files.base import ContentFile
from openpyxl import load_workbook
fc = FileContainer.objects.first()
bytefile = fc.file.read()
wb = load_workbook(ContentFile(bytefile))
ws = wb.worksheets[0]我用S3检查过了,它工作得很好。
如果你想在本地保存文件,你可以尝试这样做:
from django.core.files.base import ContentFile
from django.core.files.storage import FileSystemStorage
from openpyxl import load_workbook
fc = FileContainer.objects.first()
local_storage = FileSystemStorage()
bytefile = fc.file.read()
newfile = ContentFile(bytefile)
relative_path = local_storage.save(fc.file.name, newfile)
wb = load_workbook(local_storage.path(relative_path))
ws = wb.worksheets[0]https://stackoverflow.com/questions/56186282
复制相似问题