В нескольких словах я хочу, чтобы пользователь дал текстовый ввод в форме внешнего интерфейса, чтобы определить набор данных, который нужно проверить, например, «data.csv». Этот data.csv передается в виде строковой переменной в функцию python, которая должна открыть фрейм данных с указанным именем c. Ошибка:
FileNotFoundError at /
[Errno 2] File b'data.csv' does not exist: b'data.csv'
Request Method: POST
Request URL: http://127.0.0.1:8000/
Django Version: 2.2.5
Exception Type: FileNotFoundError
Exception Value:
[Errno 2] File b'data.csv' does not exist: b'data.csv'
Файл data.csv находится в том же каталоге, что и файл beta.py, который вызывает файл для его чтения. Более того, если я не передаю какое-либо значение со стороны внешнего интерфейса, а просто запускаю скрипт, и вместо dataframe = pd.read_csv(file)
у меня появляется dataframe = pd.read_csv('data.csv')
, это выдает мне ту же ошибку, но если я выполню скрипт из командная строка, то все работает просто отлично. Поэтому я не могу понять, почему скрипт не может найти data.csv, если триггер происходит из внешнего интерфейса.
Это коды. PS: Спасибо всем заранее за помощь
views.py
def get_name(request):
if request.method == 'POST':
form = NameForm(request.POST)
if form.is_valid():
file = form.cleaned_data.get('your_name')
beta.hello(file)
return HttpResponseRedirect('/thanks/')
# if a GET (or any other method) we'll create a blank form
else:
form = NameForm()
return render(request, 'home.html', {'form': form})
beta.py
import pandas as pd
def hello(file):
dataframe = pd.read_csv(file)
home. html
<form action="/" method="post">
{% csrf_token %}
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name">
<input type="submit" value="OK">
</form>
ОБНОВЛЕНИЕ:
def hello(s):
file = 'data.csv'.encode("utf-8")
print(type(file))
#dataframe = pd.read_csv(io.StringIO(str(s)))
dataframe = pd.read_csv(io.BytesIO(file))
print("---")
print(dataframe)
*** Results ***
<class 'str'>
<class 'bytes'>
---
Empty DataFrame
Columns: [data.csv]
Index: []