我试图在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建议,但在这种情况下如何更改模式?
答案 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>