没有这样的文件或目录:Python CSV

时间:2014-09-09 05:11:35

标签: python django csv

我正在尝试将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

2 个答案:

答案 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,...)