Не удается прочитать csv-файлы, загруженные с использованием pandas в Djnago

#django #pandas

#django #pandas

Вопрос:

В моих представлениях Django определено следующее представление:-

 def csv_file_upload(request):
    if request.method == "POST" and request.FILES['file_upload']:
        registry = request.POST.get('reg_select').lower()
        csv_file = request.FILES['file_upload']
        data = pd.read_csv(csv_file, delimiter="||")
        print(data.head())
    return render(request, "csv_file_upload.html", {})
  

Но часть pd.read_csv выдает мне эту ошибку:-

 cannot use a string pattern on a bytes-like object
  

Образец csv-файла, который у меня есть, выглядит следующим образом:

 Col_A||Col_B||Col_C
A0||B0||C0
A1||B1||C1
  

Тот же файл, который я могу прочитать, используя pd.read_csv() без использования Django, и не получаю эту ошибку.

Почему эта ошибка возникает при использовании Django?

Ответ №1:

Файлы загружаются в виде байтов, а не в виде строки (ожидаемо)

Вы должны прочитать файл и расшифровать его содержимое в строку

 csv_bytes = request.FILES['file_upload'].read()
csv_text = csv_bytes.decode('utf-8')
string_buffer =  io.StringIO(csv_text)
data = pd.read_csv(string_buffer , delimiter="||")