从任何地方打开(文件)

时间:2012-08-29 18:21:23

标签: python macos file-io

在OS X Lion上工作,我正试图从终端的任何地方在我的python程序中打开一个文件。我在.bash_profile中设置了以下函数:

function testprogram() {python ~/.folder/.testprogram.py}

这样我就可以(在终端中)从不同的目录运行我的测试程序〜/。

现在,如果我在我的主目录中并运行该程序,则以下操作

infile = open("folder2/test.txt", "r+")

但是,如果我与我的主文件夹位于不同的目录并在终端中写入“testprogram”,则程序启动但无法找到文件test.txt。

有没有办法让python从不受我运行程序的位置的相同位置打开文件?

6 个答案:

答案 0 :(得分:10)

如果你想让它成为多平台我会推荐

import os
open(os.path.join(os.path.expanduser('~'),'rest/of/path/to.file'))

答案 1 :(得分:9)

使用代字号表示主文件夹,就像使用.bash_profile一样,并使用os.path.expanduser

import os
infile = open(os.path.expanduser("~/folder2/test.txt"), "r+")

答案 2 :(得分:0)

这与通过除Python之外的任何其他内容引用文件没有什么不同,您需要使用绝对路径而不是相对路径。

如果您想引用相对于脚本位置的文件,您还可以使用模块中的__file__属性来获取当前正在运行的模块的位置。

此外,不要使用shell函数,只需为脚本提供一个shebang行(#!/usr/bin/env python),chmod +x,然后将其放在PATH上。

答案 3 :(得分:0)

您可以在子shell中运行该函数,以便在运行之前cd回家:

function testprogram() { (
    cd && python .folder/.testprogram.py
) }

答案 4 :(得分:0)

在python sys.argv[0]中将设置为脚本的路径(如果已知)。您可以使用此函数以及os.path中的函数来访问与包含脚本的目录相关的文件。例如

import sys, os.path

script_path = sys.argv[0]
script_dir = os.path.dirname(script_path)

def script_relative(filename):
  return os.path.join(script_dir, filename)

infile = open(script_relative("folder2/test.txt"), "r+")

David Robinson指出sys.argv[0]可能不是完整的路径名。如果是这种情况,您可以使用sys.argv[0]而不是__file__

答案 5 :(得分:-1)

使用

之类的完整路径
/path/to/my/folder2/test.txt

或缩写为

~/folder2/test.txt