【发布时间】:2020-01-09 23:36:03
【问题描述】:
简而言之,我希望用户在前端表单中提供文本输入,以定义要检查的数据集,例如“data.csv”。 此“data.csv”作为字符串变量传递给需要打开具有特定名称的数据框的 python 函数。错误是:
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: []
【问题讨论】:
-
您是否尝试先解码字节串?
file = file.decode("utf-8") -
嗨。感谢你的回答。它是一个字符串,并且字符串对象没有属性“解码”。这是错误:AttributeError at / 'str' object has no attribute 'decode'
-
我刚查了一下,Python似乎并不关心文件名是否是字节串,所以不可能是这样。
-
奇怪的是我的文件名前的字母'b'。 b'data.csv' 不存在:b'data.csv'
-
是的,这就是为什么我认为字节串可能是问题所在 - 在我的回溯中它不会像那样显示!