Как сравнить два текстовых файла в Django? - PullRequest
0 голосов
/ 14 июля 2020

Я создаю онлайн-систему судей в Django, подобную той, которую мы использовали ранее в Kickstart.

Они дали вам текстовый файл, input.txt, а затем вы получили результат после того, как вы запустил это в виде файла output.txt.

Я знаю, как это делается в Python, но я не уверен, как реализовать это в приложении Django.

Мое частичное понимание:

Пользователь отправляет файл output.txt в форму, а затем нам нужно реализовать функцию Python в views.py, используя form_class параметр. (поскольку я использую CBV).

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

Tl; dr: Как мне реализовать функцию Python в Django, которая сравнивает два текстовых файла и возвращает, если они одинаковые?

PS Я не включаю компилятор в онлайн-судью, поскольку я нахожусь на ранней стадии разработки этого приложения, и это может быть накладными расходами.

РЕДАКТИРОВАТЬ: РЕШЕНО

1 Ответ

1 голос
/ 14 июля 2020

В основном вам нужно создать форму для двух текстовых файлов, которые загружают их (см. Этот проект для получения дополнительной информации: https://github.com/axelpale/minimal-django-file-upload-example). Это создает почтовый запрос с вашими файлами. Затем, на ваш взгляд, вы можете получить файлы, обратившись к данным почтового запроса (request.FILES['file1']). Затем вы можете запустить функцию python для этих файлов. Эта функция должна быть вашей функцией сравнения.

См. Этот пост для получения справки по функции сравнения python: Построчно сравнивайте два разных файла в python.

Вот пример функции, о которой я говорю:

def compare(f1, f2):
    is_same = True
    for line1, line2 in zip(f1, f2):
        if line1 != line2:
            is_same = False
    return is_same

files = request.FILES.getlist('a_bunch_of_posted_files') #get posted your files

same_files = True
for i in range (0,50):
    if i < 49:
        if not compare(files[i],files[i+1]:
            same_files = False
if(same_files)
    #then the files are all the same and you can just pick one to display 
    #or do whatever with
...