我是Django和Python的新手。我正在尝试比较两个CSV文件,并在views.py中创建一个新文件(两个文件彼此之间有多少不同)。首先,我获取这些文件并将其设置为变量,以确保用户可以选择和比较任何名称的文件。但是我得到了这个错误。
FileNotFoundError at /compare
[Errno 2] No such file or directory: 'fine_name.csv'
我期望的是,当用户选择两个文件并单击“比较”按钮时,他们得到了一个新的更新的CSV文件“ update.csv”。
这是我的代码
views.py
from django.shortcuts import render
from django.http import HttpResponse
def comp(request):
if request.method == 'POST':
file1 = request.POST.get('file1', '')
file2 = request.POST.get('file2','')
with open(file1, 'r') as t1, open(file2, 'r') as t2:
fileone = t1.readlines()
filetwo = t2.readlines()
with open('update.csv', 'w') as outFile:
for line in filetwo:
if line not in fileone:
outFile.write(line)
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="update.csv"'
return response
return render(request,'compare.html')
compare.html
{% extends 'base.html' %}
{% block title %}Comparision{% endblock %}
{% block content %}
<div class="container">
<div class="row justify-content-md-center">
<div class="col-md-6">
<form method="POST" action="">{% csrf_token %}
<h1 class="mb-3 display-4 text-light">Comparision</h1>
<input type="file" id="file1" name="file1" class="form-control mt-3" required autofocus>
<input type="file" id="file2" name="file2" class="form-control mt-3" required autofocus>
<button class="mt-3 col-md-3 btn btn-lg btn-info btn-block" type="submit">Compare</button>
</form>
</div>
</div>
{% endblock %}
如果要通过表单上传文件,请添加enctype="multipart/form-data"
html表单标签:
<form method="POST" action="" enctype="multipart/form-data">
{% csrf_token %} # rest of the form
然后,您需要从读取文件request.FILES
,如下所示:
file1 = request.FILES['file1'].read().decode("utf-8")
file2 = request.FILES['file2'].read().decode("utf-8")
现在,您可以读取以下文件:
lines = file1.split("\n")
for line in lines:
fields = line.split(",")
最后,在输出csv时,可以django's example
用于输出csv。像这样:
import csv
from django.http import HttpResponse
def comp(request):
# rest of the code
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
writer = csv.writer(response)
updated_csv_list = []
for line in file1:
updated_csv_list.append(line.split(','))
for line in file2:
llist = line.split(',')
if llist not in updated_csv_list:
updated_csv_list.append(llist)
for line in updated_csv_list:
writer.writerow(line)
return response
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句