【发布时间】:2017-12-12 03:53:51
【问题描述】:
我正在尝试在我的 views.py 文件中逐行读取 csv 文件。 csv文件结构如下:
xk、ab、cd
11、20、30
31、27、35
等
if request.method == "POST":
pdb.set_trace()
form = FormName(request.POST, request.FILES)
file = request.FILES['csv'].read()
if form.is_valid():
try:
reader = csv.DictReader(file)
for row in reader:
xk = row['xk']
在执行上面的最后一行之前,当我在 pdb 中打印 'row' 时,我得到 {'x': 'k'}。但是,我应该得到“11、20、30”(或与该数据类似的东西,因为 DictReader 应该自动使用第一行作为标题。当我在 pdb 中打印文件时,我得到:
'xk,ab,cd\n11,20,30\n31,27,35' 等。如何正确读取 csv 文件?
【问题讨论】:
-
我不确定
request.FILES['csv'].read(),在with open语句中打开文件不是一个选项? -
with open 存在问题,这就是我使用 .read() 的原因。这有几个线程:/
-
(我得到这个错误:TypeError: 'coercing to Unicode: need string or buffer, InMemoryUploadedFile found')
-
在不使用
.read()方法的情况下尝试相同的方法,例如this post -
request.FILES['csv']返回一个 UploadedFile 对象,这似乎适合您的 dictReader 方法