python:文件路径不再适用于imp

时间:2015-10-20 19:29:05

标签: python filepath python-import

我最近开始使用导入来更好地组织我在python中的代码。我file1.py中的原始代码使用了以下行:

def foo():
    files = [f for f in os.listdir('.') if os.path.isfile(f)]
    print files
    #do stuff here....

其中引用了与代码相同的文件夹中的所有文件,print files将正确的输出显示为文件名数组。

但是,我最近将目录结构更改为:

./main.py
./folder1/file1.py
./folder1/data_file1.csv
./folder1/data_file2.csv
./folder1/......

在main.py中,我使用:

import imp
file1 = imp.load_source('file1', "./folder1/file1.py")
.
.
.

file1.foo()

现在,files是一个空数组。发生了什么?除了亲戚之外,我还尝试过绝对文件路径。直接声明data_file1.csv的数组有效,但我无法使用此导入工作。

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

执行os.listdir('.')时,您试图列出'.'(当前目录)的内容,但这不需要是脚本所在的目录,它会是您运行脚本时所在的目录(除非您在python脚本中使用了os.chdir())。

您不应该依赖当前的工作目录,而是可以使用__file__来访问当前脚本的路径,然后您可以使用os.path.dirname()来获取脚本所在的目录。

然后,您可以使用os.path.join()将从os.listdir()获取的文件的路径与脚本目录连接起来,并检查这些路径是否是用于创建文件列表的文件。

示例 -

def foo():
    filedir = os.path.dirname(__file__)
    files = [f for f in (os.path.join(filedir, fil) for fil in os.listdir(filedir)) if os.path.isfile(f)]
    print files
    #do stuff here....