Django REST framework - разбор загруженного файла csv
Я настроил конечную точку фреймворка Django REST, которая позволяет мне загрузить файл csv.
Serializers.py выглядит следующим образом:
from rest_framework import serializers
class UploadSerializer(serializers.Serializer):
file_uploaded = serializers.FileField()
class Meta:
fields = ['file_uploaded']
В моем файле views.py я пытаюсь прочитать данные из загруженного csv следующим образом:
class UploadViewSet(viewsets.ViewSet):
serializer_class = UploadSerializer
def create(self, request):
file_uploaded = request.FILES.get('file_uploaded')
with open(file_uploaded, mode ='r')as file:
csvFile = csv.reader(file)
for lines in csvFile:
print(lines)
Я получаю следующую ошибку:
... line 37, in create
with open(file_uploaded, mode ='r') as file:
TypeError: expected str, bytes or os.PathLike object, not InMemoryUploadedFile
Я проверил тип() файла_uploaded и он равен <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
Как я могу прочитать этот файл в словарь или фрейм данных, чтобы я мог извлечь из него нужные мне данные?
Когда вы делаете request.FILES.get('file_uploaded'), он возвращает InMemoryUploadedFile, который является оберткой вокруг объекта файла. Вы можете получить доступ к объекту файла, используя атрибут file.
file_uploaded # <InMemoryUploadedFile: xxx (xxx/xxx)>
file_object = file_uploaded.file
Затем этот файл_объект может быть открыт.
Объект InMemoryFileObject можно использовать практически так же, как и открытый файл, поэтому открывать его не нужно.
def create(self, request):
file_upload = request.FILES.get("file_uploaded")
csvFile = csv.reader(file_upload)
for line in csvFile:
print(line)
Здесь есть хорошая информация о работе с файлами в django.
https://docs.djangoproject.com/en/4.1/topics/http/file-uploads/#handling-uploaded-files-with-a-model