Django:使用FileField实例读取上传的CSV文件

时间:2017-11-15 20:16:11

标签: python django csv

我试图在FileField类型的字段中读取用户上传的.csv文件的数据。我对访问该对象没有任何问题,但我似乎无法使其与csv模块一起使用。以下是我正在尝试的内容:

reader = csv.reader(object.uploaded_file.read())
for rows in reader:
...

其中object是我的模型的实例,uploaded_file是相应的字段。

我收到此错误:

  

迭代器应该返回字符串,而不是int(你是否在文本中打开文件   模式?)

此外,

我尝试使用open()方法但是成功了。关于这个主题的文件看起来很模糊。更糟糕的是,我在上面使用的read()方法中唯一能找到的就是:

  

除了列出的方法外,File还公开了以下内容   其文件对象的属性和方法:encoding,fileno,flush,   isatty,newlines,read,readinto,readline,readlines,seek,   softspace,tell,truncate,write,writelines,xreadlines,readable(),   writable()和seekable()。

修改

我知道这可能与阅读模式有关thread建议,但在这种情况下如何更改模式?

2 个答案:

答案 0 :(得分:2)

这是我的解决方法(因为在FileField上传的情况下你不应该'打开'已打开的文件)。

import csv
from io import StringIO

def parse_file(self, csv_upload):
    file = csv_upload.read().decode('utf-8')
    csv_data = csv.reader(StringIO(file), delimiter=',')
    for row in csv_data:
        print(row)

答案 1 :(得分:1)

我终于找到了解决方法:

 reader = csv.reader(open(object.uploaded_file.path,'r'))

我使用read()属性,而不是像我在问题中所说的那样使用内置open()File path的{​​{1}}对象文档较少。 p>