In my django application, I provide a form that allows users to upload a file. The file can be in a variety of formats (Excel, CSV), come from a variety of platforms (Mac, L
I use the csv.DictReader and it appears to be working well. I attached my code snippet, but it is basically the same as another answer here.
import csv as csv_mod
import codecs
file = request.FILES['file']
dialect = csv_mod.Sniffer().sniff(codecs.EncodedFile(file,"utf-8").read(1024))
file.open()
csv = csv_mod.DictReader( codecs.EncodedFile(file,"utf-8"), dialect=dialect )
For CSV and Excel upload to django, this site may help.
As mentioned above, the code snippet I provided was in fact working as intended - the problem was with my terminal, and not with python encoding.
If your view needs to access a UTF-8 UploadedFile
, you can just use utf8_file = codecs.EncodedFile(request.FILES['file_field'],"utf-8")
to open a file object in the correct encoding.
I also noticed that, at least for InMemoryUploadedFile
s, opening the file through the codecs.EncodedFile
wrapper does NOT reset the seek()
position of the file descriptor. To return to the beginning of the file (again, this may be InMemoryUploadedFile
specific) I just used request.FILES['file_field'].open()
to send the seek()
position back to 0.