9

OS X Lionで作業していて、ターミナルのどこからでもpython-programでファイルを開こうとしています。.bash_profileに次の関数を設定しました。

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

このようにして、(ターミナルで)〜/とは異なるディレクトリからテストプログラムを実行できます。

これで、ホームディレクトリにいてプログラムを実行すると、次のように機能します。

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

ただし、ホームフォルダとは別のディレクトリにいて、ターミナルに「testprogram」と書き込むと、プログラムは起動しますが、ファイルtest.txtが見つかりません。

プログラムを実行する場所に影響されない同じ場所からPythonにファイルを常に開かせる方法はありますか?

4

6 に答える 6

12

マルチプラットフォームにしたいならオススメ

import os
open(os.path.join(os.path.expanduser('~'),'rest/of/path/to.file'))
于 2012-08-29T18:27:54.020 に答える
11

の場合と同じように、チルダを使用してホームフォルダを表し、.bash_profileを使用しますos.path.expanduser

import os
infile = open(os.path.expanduser("~/folder2/test.txt"), "r+")
于 2012-08-29T18:24:02.433 に答える
0

これは、Python以外の方法でファイルを参照するのと同じです。相対パスではなく、絶対パスを使用する必要があります。

スクリプトの場所に関連するファイルを参照する場合は、モジュールの__file__属性を使用して、現在実行中のモジュールの場所を取得することもできます。

また、シェル関数を使用するのではなく、スクリプトにシバン行(#!/usr/bin/env pythonchmod +xを付けて、のどこかに配置しますPATH

于 2012-08-29T18:24:43.817 に答える
0

cd関数をサブシェルで実行するだけで、実行する前にホームに戻ることができます。

function testprogram() { (
    cd && python .folder/.testprogram.py
) }
于 2012-08-29T18:25:18.623 に答える
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+")

sys.argv[0]David Robinsonは、これは完全なパス名ではない可能性があると指摘しています。この場合、使用する代わりに使用sys.argv[0]できます。__file__

于 2012-08-29T18:27:39.383 に答える
-1

次のいずれかのフルパスを使用します

/path/to/my/folder2/test.txt

または省略形

~/folder2/test.txt 
于 2012-08-29T18:27:07.137 に答える