2015-09-14 4 views
2

Я заставляю пользователя загружать txt-файл, а затем отправлять его, чтобы я мог выполнить некоторую работу над этим файлом в одном из моих представлений.Python - Django - объект 'InMemoryUploadedFile' не имеет атрибута 'split'

У меня были проблемы с этим, но с помощью сообщества теперь, по крайней мере, признал метод POST в моей форме.

Что происходит, так это то, что мое представление не работает при чтении файла. Это я отладки мой взгляд:

enter image description here

Как вы можете видеть проверки метода do_some_work для метода POST, и если после этого файл, который поставляется с запросом, то есть TXT-файл, а затем разделить строки в этом файле.

Ну, это не работает. Когда я достигаю этой линии, я получаю:

'InMemoryUploadedFile' object has no attribute 'split' 

Так что я не знаю, что может быть неправильным.

Это моя форма:

<form action="{% url "do_some_work" %}" method="POST" enctype="multipart/form-data"> 
    {% csrf_token %} 
    <div class="form-group"> 
     <label for="exampleInputFile">File input</label> 
     <input type="file" id="exampleInputFile" name="some_file"> 
    </div> 
    <button type="submit" class="btn btn-default">Submit</button> 
</form> 

Я буду признателен за любую помощь в этом. Если вам нужна дополнительная информация, просто дайте мне знать Спасибо.

ответ

4

Вы пытаетесь разделить файл-объект. Вы можете разделить только содержимое файла. Файловый объект имеет разные средства для чтения и управления его содержимым, чем простая строка.

InMemoryUploadedFile действует как прокси-сервер для объекта file Python. Для того, чтобы получить список отдельных линий, вы можете использовать метод readlines():

lines = data.readlines() 

Если вам просто нужно перебирать отдельные строки, вы можете повторять сам файловый объект:

for line in data: 
    # do something with line 
Смежные вопросы