[英]Django: Read uploaded CSV file using FileField instance
我正在嘗試讀取用戶在FileField
類型的字段中上傳的.csv文件的數據。 我訪問該對象沒有問題,但是我似乎無法使其與csv
模塊一起使用。 這是我正在嘗試的:
reader = csv.reader(object.uploaded_file.read())
for rows in reader:
...
其中object
是我的模型的實例, uploaded_file
是相應的字段。
我收到此錯誤:
迭代器應返回字符串,而不是int(您是否以文本模式打開文件?)
也,
我嘗試使用open()
方法,但沒有成功。 關於此主題的文檔似乎太含糊。 更糟糕的是,我在上面使用的read()
方法上唯一能找到的是:
除了列出的方法外,File還公開了其文件對象的以下屬性和方法:編碼,fileno,flush,isatty,換行符,讀取,readinto,readline,readlines,seek,softspace,告訴,截斷,寫入,writelines,xreadlines ,read(),writable()和seekable()。
編輯
我知道這可能與具有該線程建議的閱讀模式有關,但是在這種情況下如何更改模式?
這是我的解決方法(因為在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)
我終於找到了解決方法:
reader = csv.reader(open(object.uploaded_file.path,'r'))
我沒有使用我在問題中提到的文檔數量很少的內置File
對象的read()
或open()
,而是使用path
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.