【问题标题】:How to convert content of InMemoryUploadedFile to string如何将 InMemoryUploadedFile 的内容转换为字符串
【发布时间】:2018-11-04 09:49:05
【问题描述】:

有谁知道如何将Django2中上传文件(InMemoryUploadedFile)的内容转换为字符串?

我想知道下面convert2string()的写法:

uploaded_file = request.FILES['file']
my_xml = convert2string(uploaded_file)  # TODO write method(convert to xml string)
obj = MyObject()
parser = MyContentHandler(obj)
xml.sax.parseString(my_xml, parser)  # or xml.sax.parse(convertType(uploaded_file), parser)

【问题讨论】:

    标签: django python-3.x


    【解决方案1】:

    尝试str(uploaded_file.read())InMemoryUploadedFile 转换为str

    uploaded_file = request.FILES['file']
    print(type(uploaded_file))  # <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
    print(type(uploaded_file.read()))  # <class 'bytes'>
    print(type(str(uploaded_file.read())))  # <class 'str'>
    


    UPDATE-1
    假设您正在上传如下文本文件(.txt.json 等),

    my text line 1
    my text line 2
    my text line 3
    

    那么你的观点是这样的,

    def my_view(request):
        uploaded_file = request.FILES['file']
        str_text = ''
        for line in uploaded_file:
            str_text = str_text + line.decode()  # "str_text" will be of `str` type
        # do something
        return something
    

    【讨论】:

    • 谢谢,但str(uploaded_file.read()) 不适用于ValueErrorunknown url type: "b''"
    • 您确定异常是从该行引发的吗?
    • @KoheiTAMURA 更新了答案
    • for line in uploaded_file: 上方添加str_text = '' 并将str_text = line.decode() 更改为str_text = str_text + line.decode() 后,您的代码工作正常。谢谢!
    • 很高兴知道:)
    【解决方案2】:

    file_in_memory -> InMemoryUploadedFile

    file_in_memory.read().decode() -> txt output
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多