【问题标题】:How do I compare two text files in Django?如何比较 Django 中的两个文本文件?
【发布时间】:2020-07-13 21:49:53
【问题描述】:

我正在 Django 中构建一个在线法官系统,就像我们之前在 Kickstart 中使用的那样。

他们给了你一个文本文件,input.txt,然后你在运行后得到一个输出,格式为 output.txt 文件。

我知道这是如何在 Python 中完成的,但我不确定如何在 Django 应用程序中实现它。

我的部分理解:

用户将output.txt文件提交到表单,然后我们需要使用form_class参数实现views.py中的Python函数。 (因为我使用的是 CBV)。

但关键是我无法弄清楚FormView(或UpdateView)基于类的视图如何将该函数应用于上传的文件。

Tl;dr:如何在 Django 中实现一个 Python 函数来比较两个文本文件,如果它们相同则返回?

PS 我不包括在线评委的编译器,因为我正处于这个应用程序的早期阶段,这可能是一笔间接费用。

编辑:已解决

【问题讨论】:

  • 在form_valid方法中,你写一个文件,比较它,然后生成一个响应。

标签: python django web


【解决方案1】:

基本上,您需要为上传它们的两个文本文件创建一个表单(查看此项目以获取更多信息:https://github.com/axelpale/minimal-django-file-upload-example)。这将使用您的文件创建一个发布请求。然后,在您看来,您可以通过访问发布请求数据 (request.FILES['file1']) 来获取文件。然后,您可以在这些文件上运行 python 函数。这个函数应该是你的比较函数。

有关 python 比较功能的帮助,请参阅此帖子:Compare two different files line by line in 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

【讨论】:

  • 但是我如何比较超过 50 个文件?我的意思是,即使我使用这种方法比较单个文件,我也需要对 50 多个文件重复此操作。这适用于单个文件,但随着要比较的文件数量的增加,除非您有更好的建议,否则方法的数量也需要增加。
  • 不,只需添加一个循环或递归方法即可通过文件比较工作。同样,循环文件上传表单并发布请求
  • 这不起作用,因为我正在比较上传文件的文件的名称不同。递归循环对不同的文件名没有帮助。您可以向我展示支持您的声明的实现吗?
  • 是的,文件名是什么并不重要。给我一秒钟写一个
  • 那里,那个函数告诉你我在说什么,它不是很有效,但你可以写一个比较函数,然后在所有文件中运行它,然后做任何你想做的事确定它们是否都相等后的文件
猜你喜欢
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2015-07-08
相关资源
最近更新 更多