我有一个python脚本读取的文本文件,在它的电流称为“data.txt中”工作目录,然后将数据转换它里面插入另一单独的程序来处理JSON格式。
我遇到的问题是,我不知道如何读的.txt文件(谱写新的一个),它是在同一目录中。应用程序时Python的脚本都捆绑起来。 目前的方法,我使用的,因为东西不起作用使用事实上,它是从终端跑,而不是作为一个执行的.app用它做什么?
任何帮助表示赞赏!
我有一个python脚本读取的文本文件,在它的电流称为“data.txt中”工作目录,然后将数据转换它里面插入另一单独的程序来处理JSON格式。
我遇到的问题是,我不知道如何读的.txt文件(谱写新的一个),它是在同一目录中。应用程序时Python的脚本都捆绑起来。 目前的方法,我使用的,因为东西不起作用使用事实上,它是从终端跑,而不是作为一个执行的.app用它做什么?
任何帮助表示赞赏!
在Mac上使用。应用程序启动时没有任何合理的当前工作目录。
当然,这有一定的工作目录,你可以很容易地找到它是什么在运行时由os.getcwd()
您可以测试多种推出不同版本的OS X的不同的方法来找出所有的模式,但什么好处呢那你呢?
好消息是,你显然不是真的要在当前工作目录; 你所需要的。应用程序包或.exe的目录。
换句话说,如果有人做这样的:
C:\Users\foo> C:\Stuff\MyProgram.exe
你想C:\Stuff
(可执行文件的目录),不C:\Users\foo
(工作目录)。
在Windows中,这是很容易。 一个.exe是只是一个文件,它的路径将是__path__
你在Python得到的,所以:
import os
pathToApp = os.path.dirname(__path__)
在Mac上,它很难。 一。应用程序是一个包含其他文件和目录成束的目录。 某处有一个可执行的解释和脚本的副本,并__path__
将会给您后者,而不是路径。应用程序。
得到正确的方法是使用可可(或的CoreFoundation):
import Cocoa
pathToApp = Cocoa.NSBundle.mainBundle().bundlePath()
如果你不想做,你几乎必须依靠一些信息的文件说,你不能依靠和可能改变的一天。 但是,下面的代码应该是安全的:
import os
pathToApp = __file__
while not pathToApp.endswith('.app'):
path = os.path.dirname(path)
为了使这个停止工作,无论是剧本必须是。应用程序包之外,或者你要找的人,或包内其他的.app内必须要停止被命名的.app,或者他们会必须停止被构造为正常的目录; 没有这似乎可能在OS X 10 *,甚至OS Y 11来改变。
作为一个方面的问题:你想做什么是最有可能首先是一个坏主意。 一台Mac应用程序不应该在它旁边的文件进行工作。 相反,如果用户要指望上它一起工作的文件,你可能想要一个简单的Unix可执行文件(或只是使用chmod + X的纯Python脚本),而不是应用程序。
使用__file__
变量。 这会给你您的模块文件名。 使用功能os.path
,你可以决定你的模块的父目录的完整路径。 该os.path
模块是标准Python文档,你应该能够找到。
然后,你可以用你的文件名的模块路径结合起来,打开它,使用os.path.join
。