Сохраните загруженный файл .txt с новыми строками в переменной Django

#python #django #post #file-io

Вопрос:

Я хотел сохранить содержимое загруженного файла .txt (с новыми строками) в переменной, чтобы я мог вызывать другие свои функции в этой переменной. Но я не могу найти способ добиться этого. Я перепробовал все методы, но это не работает

Вот простой пример кода:

Шаблон

 <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="txt">
    <button type="submit" name="encode">Encode</button>
</form>
 

Вид

 from .algorithms.algo import encoder 

def encoder(request):
    context = {'encoded':''}
    if request.method == 'POST':
        text = request.FILES['txt'].read()
        encoded = encoder(text)
        context['encoded'] = encoded
    return render(request, 'template.html', context)
 

Кроме того, когда я попытался вывести файл, он показал мне какой-то странный текст вместо фактического содержимого файла.

Пожалуйста, администраторы, не закрывайте этот вопрос, я обшарил весь Интернет, но не нашел ответа на свой вопрос


Или есть способ получить значение из `textarea` и сохранить его в переменной с новыми строками?

Комментарии:

1. предоставьте свой странный текст здесь

2. @AshrafulIslam b’rnrn48′, но на самом деле это должно быть «nn48 » (только с двумя новыми строками). В любом случае, когда я сохраняю эти данные в переменной и продолжаю выполнять свою функцию(даже с этими странными данными), она возвращает неправильный ответ. Похоже, контент хранится в другом формате. Я вывел его в шаблоне.

Ответ №1:

Попробуй:

 text.decode("utf-8")
 

или

 encoded.decode("utf-8")
 

перед контекстированием значения

Комментарии:

1. Он удалил эти странные тире, но похоже, что он преобразовал все новые строки в пробелы или что-то в этом роде. =(

Ответ №2:

Сначала вам нужно декодировать содержимое, потому что данные, которые вы читаете, выражены в байтах. Вы можете сделать это, изменив:

text = request.FILES['txt'].read() Для text = request.FILES['txt'].read().decode()

или вы можете расшифровать его после с помощью:

text = text.decode()

Комментарии:

1. Он не сохраняет новые строки, но да, он очищает текст