Naz*_*een 12 python csv django file-upload django-forms
我正在使用django在python中开发一个应用程序.用户可以上传CSV文件.我使用文件上传来获取文件.但是,它并没有存储在任何地方.我尝试从请求处理文件.当我试图打开文件时,它会出错.我使用python中存在的CSV库进行处理.根据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)
Run Code Online (Sandbox Code Playgroud)
下面这行给出了错误.
paramFile = open(request.FILES['uploadFile'], 'rb')
Run Code Online (Sandbox Code Playgroud)
给定的错误是:
TypeError: coercing to Unicode: need string or buffer, InMemoryUploadedFile found
Run Code Online (Sandbox Code Playgroud)
如果您对此有任何疑问,请提出您的建议.提前致谢.
Mar*_*hyn 16
这适用于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)
Run Code Online (Sandbox Code Playgroud)
Django 2, Python 3.6,同样的问题,谷歌搜索半天,这是对我有用的解决方案。
form.is_valid:
csv_file = request.FILES['file']
csv_file.seek(0)
reader = csv.DictReader(io.StringIO(csv_file.read().decode('utf-8')))
for row in reader
.....
.....
Run Code Online (Sandbox Code Playgroud)
详细的文章在这里->来源
open()将文件名作为参数,而不是文件对象本身.
你能尝试这样的事吗:
paramFile = request.FILES['uploadFile'].read()
portfolio = csv.DictReader(paramFile)
Run Code Online (Sandbox Code Playgroud)