【问题标题】:python: file paths no longer work with imppython:文件路径不再适用于 imp
【发布时间】:2015-10-20 19:29:04
【问题描述】:

我最近开始使用导入来更好地组织我在 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 直接声明一个数组是可行的,但我无法使用此导入来处理其他任何事情。

这里发生了什么?

【问题讨论】:

  • 你把file1和朋友收藏到files了吗?
  • 它完全是空的?它甚至没有main.py ?
  • @abgordon ,您是否要在 folder1 中查找文件?
  • os.path from foo()main.py 中使用,因此它调用main.py 路径而不是file1.py's
  • @MarkZampedroni 这绝对是真的,但需要下面建议的额外join 代码。

标签: python filepath python-import


【解决方案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....

【讨论】:

  • 这非常有效。我当然需要对我的for f in files:if f == 'file1.py':pass 进行初步检查,并注意到我必须将文件检查更改为if f == './folder1/file1.py':,这与'.'引用主要所在文件夹的建议一致.谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2011-07-12
相关资源
最近更新 更多