python:文件路径不再适用于 imp
python: file paths no longer work with imp
我最近开始使用导入来更好地组织我在 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
声明一个数组是可行的,但我不能得到任何其他东西来处理这个导入。
这是怎么回事?
当您执行 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....
我最近开始使用导入来更好地组织我在 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
声明一个数组是可行的,但我不能得到任何其他东西来处理这个导入。
这是怎么回事?
当您执行 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....