Django REST framework - parse uploaded csv file
I have setup Django REST framework endpoint that allows me to upload a csv file.
The serializers.py looks like this:
from rest_framework import serializers class UploadSerializer(serializers.Serializer): file_uploaded = serializers.FileField() class Meta: fields = ['file_uploaded']
In my views.py file, I'm trying to read data from uploaded csv like this:
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)
I'm getting the following error:
... line 37, in create with open(file_uploaded, mode ='r') as file: TypeError: expected str, bytes or os.PathLike object, not InMemoryUploadedFile
I have checked type() of file_uploaded and It is
How can I read this file into dictionary or dataframe so I can extract the data I need from it?
When you do request.FILES.get('file_uploaded') it returns back an InMemoryUploadedFile which is a wrapper around a file object. You can access the file object using the file attribute.
file_uploaded # <InMemoryUploadedFile: xxx (xxx/xxx)> file_object = file_uploaded.file
This file_object can then be opened.
an InMemoryFileObject can be used pretty much in the same way as an open file., so you don't need to open it.
def create(self, request): file_upload = request.FILES.get("file_uploaded") csvFile = csv.reader(file_upload) for line in csvFile: print(line)
This has some good information on file handling in django.