Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python (2,';在Django上尝试打开csv文件时,没有此类文件或目录';)_Python_Django_Csv_Django Models_Opencsv - Fatal编程技术网

Python (2,';在Django上尝试打开csv文件时,没有此类文件或目录';)

Python (2,';在Django上尝试打开csv文件时,没有此类文件或目录';),python,django,csv,django-models,opencsv,Python,Django,Csv,Django Models,Opencsv,我一辈子也弄不明白为什么我总是犯这样的错误。因此,我有一个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

我一辈子也弄不明白为什么我总是犯这样的错误。因此,我有一个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

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

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脚本放在(或保持)同一文件夹中,就完成了!
(脚本未经测试,请告诉我是否出于愚蠢而使其无法运行)

我猜当django运行您的模块时,它是从app dir级别运行的,而当您独立运行它时,它是从app dir内部运行的。类似于
/
vs
。/
您可以共享您的项目层次结构吗?您是否尝试使用绝对路径打开该文件?@srikarapal该应用程序的名称称为backend,我在该目录中有file.csv以及正在访问它的文件。我开始认为我必须使用STATIC_ROOT并将其与我的其他资产放在一起。@LaszloPapp是的,我这样做了:/@barrigaj:这样行吗?如果是,您可以使用os.path.abspath(文件)。我像您的示例中一样使用了os.path.abspath,它可以工作!感谢@Laszlo Pappy,您应该使用
os.path.join
而不是手动组合字符串来创建路径。