【问题标题】:(2, 'No such file or directory') when trying to open a csv file on Django(2,'没有这样的文件或目录')尝试在 Django 上打开 csv 文件时
【发布时间】:2013-08-31 04:54:11
【问题描述】:

我一生都无法弄清楚为什么我不断收到此错误。所以我有一个运行以下代码的 django 模块

c = open('file.csv', 'rb')
reader = csv.reader(c)
rows = []
rownum = 0
for row in reader:
    # Skip header
    if rownum != 0:
        rows.append(row)
    rownum += 1
c.close()
return rows

有几件事要记住。 file.csv 与调用此函数的 python 文件位于同一目录中。我在 django 环境之外的 python 解释器中运行这个相同的代码,它运行良好。我试过rb和r,都不起作用。我不知道为什么它不起作用。

我有什么遗漏吗?

我正在使用python2.6

【问题讨论】:

  • 我猜当 django 运行你的模块时,它会从应用程序目录级别运行它,而当你独立运行它时,它会从应用程序目录内部运行。 ./ vs ../ 之类的,你能分享一下你的项目层次结构是什么吗?
  • 你试过用绝对路径打开文件吗?
  • @SrikarAppal 该应用程序的名称称为后端,我在该目录中有 file.csv 以及正在访问它的文件。我开始认为我必须使用 STATIC_ROOT 并将其与我的其他资产一起使用。
  • @LaszloPapp 是的,我做到了:/
  • @barrigaj:这行得通吗?如果是,您可以使用 os.path.abspath(file).

标签: python django csv django-models opencsv


【解决方案1】:

当 Python 想要使用 python 命令执行文件时,它不会像解释器那样在 py-Location 中查找文件,而是在其他文件夹中查找文件(不知道具体在哪个文件夹中)。那么如何解决这个问题:如果要保持没有固定文件路径的独立性,请使用以下代码:

import os
workpath = os.path.dirname(os.path.abspath(__file__)) #Returns the Path your .py file is in
c = open(os.path.join(workpath, 'file.csv'), 'rb')
reader = csv.reader(c)
rows = []
rownum = 0
for row in reader:
    # Skip header
    if rownum != 0:
        rows.append(row)
    rownum += 1
c.close()
return rows

现在只需将 .csv 文件放在(或保留)与主 .py-Script 相同的文件夹中 - 就完成了! (脚本未经测试,请告诉我是否因为某些愚蠢而使其无法正常工作)

【讨论】:

  • 我在你的例子中使用了 os.path.abspath 并且它有效!感谢@Laszlo Papp
  • 你应该使用os.path.join而不是手动组合字符串来创建路径。
猜你喜欢
  • 2011-07-15
  • 2019-12-16
  • 2022-07-21
  • 1970-01-01
  • 2021-11-05
  • 2012-07-11
相关资源
最近更新 更多