Python:从另一个文件调用的程序运行不正确

2024-09-29 23:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,在我发现并解决的bug中,我的实际代码非常干净,运行良好。我想我已经缩小了一个问题,我必须以下。。。我有一个文件夹“Stocks”,其中包含python代码和另一个嵌套文件夹“PullStock”,其中包含更多python代码和文本文件

文件系统示例:

Folder: Stocks
  python code files (`stockcalc.py`)
  Folder: PullStock
    python code files (`pullList.py`)
    text files

我可以自己运行程序pullList.py,它运行得很好。它所做的只是解析文本文件的行并将变量存储到数组中。我单独运行此程序时的输出如下所示:

array length in pullList:  2

现在,当我运行stockcalc.py时,我从文件夹'PullStock'导入文件pullList.py,它不会运行相同的文件。输出如下:

array length in pullList:  0

我的stockcalc.py头如下所示:

#!/usr/bin/env python
from PullStock import pullList
#import PullStock.pullList

我已经尝试了以上两种解决方案在我的头,他们似乎都不工作。如果我正在调用这个文件,那么它的运行方式是否应该与我自己运行时的运行方式相同?如果一个解决方案不能从上述信息,那么我很抱歉浪费你的时间,我有这么多的工作要做


Tags: 文件代码py程序文件夹codefilesfolder
2条回答

你至少有多个问题。从这里开始:

from StockList import pullList

您的目录名为PullStock,但您正在尝试使用名称StockList。这显然行不通

但是,即使解决了这个问题,也有一个更大的问题:StockList不是一个包。在python2中(看起来您正在使用),如果目录中有一个名为__init__.py的文件,那么它就是一个包。它可以是空的,但必须存在

在包目录中运行脚本几乎总是错误的,因此通过修复它,您也破坏了工作的部分。无论如何,您可能会侥幸逃脱,但是您应该寻找一个更好的组织—例如,一个__main__.py文件,它允许您将包作为脚本运行,或者在顶层使用一个“启动器”脚本

如果pullList.py正在打开'spam.txt''eggs.txt'并且只希望它能工作,那么当你的工作目录不是脚本的目录时,它就不工作了;您需要将scriptdir = os.path.abspath(os.path.dirname(sys.argv[0]))添加到脚本的顶部,然后使用os.path.join(scriptdir, 'spam.txt'),等等

最后,对模块使用所有小写名称通常是个好主意。尤其是如果您希望在Windows和非Windows系统上运行相同的代码

如果您想使用多个文件组织并创建包和导入模块,您应该看看Python Doc中的教程https://docs.python.org/2.7/tutorial/modules.html#packages

在那里你会发现一个很好的解释,你应该如何组织你的包,你需要添加什么作为文件(\uu init\uuuuuuuy.py),使该文件夹被识别为一个模块…等等

相关问题 更多 >

    热门问题