我正在尝试将csv文件创建到其他目录中。在开发服务器上运行代码时,它工作正常,但在生产时,它会引发错误No such file or directory:
以下是我的代码: -
def write_operation(filename,data):
with open("./static/" + filename, "wb") as f:
writer = csv.writer(f)
writer.writerows(data)
@csrf_exempt
def download_data(request):
if request.POST.has_key('download_data'):
start_date = str(request.POST['start_date']).replace('/','-')
end_date = str(request.POST['end_date']).replace('/','-')
start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d %H:%M")
end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d %H:%M")
data.insert(0,('Barcode','Weight', 'Length','Breadth','Height'))
write_operation('data.csv',data)
return HttpResponse(json.dumps('Success'),content_type = "application/json")
ctx = {}
return render(request, 'dummy/download_data.html', ctx)
我收到的错误是: -
Exception Value: [Errno 2] No such file or directory: 'static/data.csv'
这是我的目录结构: -
├── modules
| ├── dummy
│ │ └── views.py
├── static
答案 0 :(得分:0)
您可以使用完整路径来防止这些错误。例如,您的项目文件夹/home/project-name/
。您可以为配置定义常量,并将项目主文件夹设置为base_dir
。然后更改以下代码:
def write_operation(filename,data):
with open(config.base_dir + "static/" + filename, "wb") as f:
writer = csv.writer(f)
writer.writerows(data)
编辑: 我错过了与django相关的脚本。以上解决方案是python的通用解决方案。 Django版本几乎相同。
将settings.py文件添加到以下行
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
并使用以下方法更改您的方法:
from django.conf import settings
...
def write_operation(filename,data):
with open(settings.BASE_DIR + "static/" + filename, "wb") as f:
writer = csv.writer(f)
writer.writerows(data)
事实上,两者在基础上是相同的。
答案 1 :(得分:0)
为了避免这样的问题,只需使用BASE_DIR值,即在项目settings.py
中初始化和分配的值。正如官方文件中所述:
在项目中构建路径,如下所示:os.path.join(BASE_DIR,...)