2016-04-24 23 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不正確?我認爲它應該鏈接兩個目錄,以便在從超級目錄運行程序時可以從子目錄訪問文件。

+0

您試圖打開當前目錄中的文件,而不是在'TestCases'目錄中 – dnit13

回答

1

您正在使用os.path.join(「探測器」,「的TestCase」),應該返回「探測器/的TestCases」 ,但是你不在任何地方存儲該變量。

我想你是在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') 
相關問題