【发布时间】:2010-12-24 23:03:03
【问题描述】:
我正在处理使用 Django 的 forms.FileField 上传的文件。这将返回一个 InMemoryUploadedFile 类型的对象。
我需要以通用换行模式访问此文件。关于如何在不保存然后重新打开文件的情况下执行此操作的任何想法?
谢谢
【问题讨论】:
标签: python django django-forms
我正在处理使用 Django 的 forms.FileField 上传的文件。这将返回一个 InMemoryUploadedFile 类型的对象。
我需要以通用换行模式访问此文件。关于如何在不保存然后重新打开文件的情况下执行此操作的任何想法?
谢谢
【问题讨论】:
标签: python django django-forms
如果您使用的是 Python 2.6 或更高版本,则可以在将文件读入内存后使用 io.StringIO 类(使用 read() 方法)。示例:
>>> import io
>>> s = u"a\r\nb\nc\rd"
>>> sio = io.StringIO(s, newline=None)
>>> sio.readlines()
[u'a\n', u'b\n', u'c\n', u'd']
要在您的 django 视图中实际使用它,您可能需要将输入文件数据转换为 unicode:
stream = io.StringIO(unicode(request.FILES['foo'].read()), newline=None)
【讨论】:
reader = csv.DictReader(stream) 然后for row in reader: #import each row 有什么想法会影响内存使用吗?我有一个“预算”:) 我知道我可能应该将文件保存在一个临时位置,但我很好奇我是否需要暂时进行任何类似垃圾的清理工作?