Получение ошибки типа при открытии загруженного CSV-файла

Я разрабатываю приложение в python с django. Пользователь может загрузить CSV-файл. Я использую загрузку файла для получения файла. Но он не хранится нигде. Я пытаюсь взять его из запроса для обработки файла. Пока я пытаюсь открыть файл, он дает ошибку. Я использую библиотеку CSV, существующую в python для обработки. Элементы и атрибуты формы, используемые для django. Объект запроса, который я пытаюсь загрузить загруженный файл, также является объектом, созданным django.

import csv from rootFolder.UploadFileForm def uploadFile(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): paramFile = open(request.FILES['uploadFile'], 'rb') portfolio = csv.DictReader(paramFile) users = [] for row in portfolio: users.append(row) 

Эта строка ниже дает ошибку.

 paramFile = open(request.FILES['uploadFile'], 'rb') 

Данная ошибка:

 TypeError: coercing to Unicode: need string or buffer, InMemoryUploadedFile found 

Пожалуйста, примите ваше предложение, если у вас есть идея по этому поводу. Заранее спасибо.

4 Solutions collect form web for “Получение ошибки типа при открытии загруженного CSV-файла”

open () принимает имя файла как аргумент, а не сам файл.

Можете ли вы попробовать что-то вроде этого:

 paramFile = request.FILES['uploadFile'].read() portfolio = csv.DictReader(paramFile) 

Не нужно открывать файл, он уже открыт. Вы должны иметь возможность передать его прямо в DictReader.

Это работает для Python 3

 import csv import io ... csv_file = request.FILES['uploadFile'] decoded_file = csv_file.read().decode('utf-8') io_string = io.StringIO(decoded_file) for line in csv.reader(io_string, delimiter=';', quotechar='|'): print(line) 

Вы получаете TypeError, потому что встроенная функция open ожидает строку, которая является путем к файлу.

Это работает?

  if form.is_valid(): request.FILES['uploadFile'].open("rb") portfolio = csv.DictReader(request.FILES['uploadFile'].file) 
Python - лучший язык программирования в мире.