2016-04-24 10 views
0

私はプログラムをPython 2.7.11で開くためのファイルを入力するためのユーザ入力に依存するプログラムを持っています。私は、元のディレクトリDetector内のサブディレクトリにTestCasesと呼ばれるファイルをすべて持っていますが、スーパーディレクトリからプログラムを実行すると、TestCasesのファイルにアクセスできないようです。私はos.path.joinを使用しようとしましたが、無駄です。ここに私のコードは次のとおりです。Python 2.7.11でディレクトリを記述することなく、ユーザ入力のサブディレクトリにあるファイルにアクセスするにはどうすればよいですか?

import os.path 
def __init__(self): 
    self.file = None 
    os.path.join('Detector', 'TestCases') 

    while self.file == None: 
     self.input = raw_input('What file to open? ') 
     try: 
      self.file = open(self.input, 'r') 
     except: 
      print "Can't find file." 

私の端末は、私は次のようにプログラムが行く実行すると:

​​

私が間違ってos.path.joinを使用していますか?スーパーディレクトリからプログラムを実行しているときに、サブディレクトリからファイルにアクセスできるように、2つのディレクトリをリンクすることになっていたと思いました。

+0

'TestCases'ディレクトリではなく現在のディレクトリでファイルを開こうとしています – dnit13

答えて

1

あなたは「検出器/テストケース」を返す必要がありますos.path.join(「検出」、「テストケース」)を使用している:最初に、あなたのコードにこのような何かを追加するのに十分であるべきで開始のためにその変数をどこにでも保存しているわけではありません。

あなたがDetectorのディレクトリにいて、TestCasesでファイルを開きたいとします。私はあなたがパスを使用することができ、その場合には、(これは、その引数を連結し、その結果を返します)参加:

import os.path 

    file = None 
    while not file: 
     input = raw_input('What file to open? ') 
     try: 
      filepath = os.path.join('TestCases', input) 
      file = open(filepath, 'r') 
     except IOError: 
      print "Can't find " + input 

あなたはそれがディレクトリを変更しないことを見ることができるように、私はos.path.joinの結果を格納しています、その引数を連結するだけで、関数がディレクトリを変更すると考えていた可能性があります。あなたはos.chdirでそれを行うことができます。

簡単なスクリプトや端末で最初に試してみてください。多くの頭痛を軽減します。

+0

このエラーが出た場合、あなたのスクリプトはDirectorディレクトリにない可能性が高いので、TestCasesディレクトリへのフルパスJose Jの例のように入力してください – Slavi

1

ドキュメントに関するos.path.join

インテリジェント一つ以上のパスコンポーネントに参加します。戻り値はパスの連結です。

PATH変数を設定したり、現在の作業ディレクトリに影響を与えると思われます。

open(os.path.join("TestCases",self.input), 'r') 
関連する問題