Массив нулевого размера для операции редукции fmin, которая не имеет идентичности
Я пытаюсь прочитать xlsx файл, но получаю ValueError массив нулевого размера для операции уменьшения fmin, который не имеет идентичности
views.py
def t(request):
context = {}
if request.method == "POST":
uploaded_file = request.FILES['document']
print(uploaded_file)
if uploaded_file.name.endswith('.xlsx'):
savefile = FileSystemStorage()
name = savefile.save(uploaded_file.name, uploaded_file)
d = os.getcwd()
file_directory = d + '\media\\' + name
readfile(file_directory)
return redirect(r)
else:
messages.warning(request, 'File was not uploaded. Please use xlsx file extension!')
return render(request, 't.html', {})
def read_file(filename):
my_file = pd.read_excel(filename)
data = pd.DataFrame(data=my_file)
Примечание: Он правильно читает некоторые файлы
Чтобы избежать ошибки, указанной в комментариях, оберните строку кода символом try/except
. Проверьте в логах, какая строка выдает ошибку, я думаю, что это вот эта:
try:
my_file = pd.read_excel(filename)
except ValueError:
messages.error(request, "The file has the wrong format.")
# or whatever error message you want to raise
В идеале, вы хотите выдать ошибку перед сохранением файла. Я бы попробовал прочитать файл с помощью pd перед его сохранением:
# ...
uploaded_file = request.FILES['document']
if uploaded_file.name.endswith('.xlsx'):
try:
_read_test = pd.read_excel(uploaded_file)
except ValueError:
messages.error(request, "The file has the wrong format.")
# or whatever error message you want to raise
return redirect('your-error-or-form-page')
savefile = FileSystemStorage()
# ...
Я не уверен, что pd может читать InMemoryFile, но именно в этой строке вы хотите отлавливать неправильные файлы. Возможно, уже есть pypi пакеты для подобных случаев