【问题标题】:How can I access an uploaded file in universal-newline mode?如何以通用换行模式访问上传的文件?
【发布时间】:2010-12-24 23:03:03
【问题描述】:

我正在处理使用 Django 的 forms.FileField 上传的文件。这将返回一个 InMemoryUploadedFile 类型的对象。

我需要以通用换行模式访问此文件。关于如何在不保存然后重新打开文件的情况下执行此操作的任何想法?

谢谢

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    如果您使用的是 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)
    

    【讨论】:

    • 这很好用。我在 django 视图中将它与 csv.DictReader 一起使用。 reader = csv.DictReader(stream) 然后for row in reader: #import each row 有什么想法会影响内存使用吗?我有一个“预算”:) 我知道我可能应该将文件保存在一个临时位置,但我很好奇我是否需要暂时进行任何类似垃圾的清理工作?
    • 这项工作只要原始文件可以编码为 utf-8,对于非 utf-8 文件它会引发错误:(
    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多