Python (2,';在Django上尝试打开csv文件时,没有此类文件或目录';)
我一辈子也弄不明白为什么我总是犯这样的错误。因此,我有一个django模块,它运行以下代码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
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
而不是手动组合字符串来创建路径。