2016-09-01 4 views
-1

私のguiは現在、4つの異なるファイルの場所を選択するオプションを持つコンボボックスを持っています。そのディレクトリ内の選択されたすべてのファイルがリストボックスに表示されます一度:Python:if文の末尾のパスを変更する

def ComboBox(self, event): 
    current = self.buttonChoice.current() 

    if (current == 0): 
     self.lb.delete(0, END) 
     for i in range(0, length1): 
      self.lb.insert(END, self.files1[i]) 

    elif (current == 1): 
     self.lb.delete(0, END) 
     sys.path.insert(0, sys.path[0]+ "\\folder1") 
     for i in range(0, length2): 
      self.lb.insert(END, self.files2[i]) 


    elif (current == 2): 
     self.lb.delete(0, END) 
     sys.path.insert(0, sys.path[0]+ "\\folder2") 
     for i in range(0, length3): 
      self.lb.insert(END, self.files2[i]) 


    elif (current == 3): 
     self.lb.delete(0, END) 
     sys.path.insert(0, sys.path[0]+ "\\folder3") 
     for i in range(0, length4): 
      self.lb.insert(END, self.files4[i]) 

しかし、私のパス機能ありえない最適な機能は、親ディレクトリに戻り、そのフォルダ(例現在の場合では代わりに貼られていないため、== 1ディレクトリは... \ folder1になります)。この作業をするには、各ステートメントの最後に1つ下のディレクトリを移動する必要があります。私は関連する質問を見て、os.chdir('..')を見つけた。何らかの理由でこれを実装するのに問題があります。どのように私は各ステートメントの最後に1つのディレクトリを下に移動することができますの任意のアイデア。

+0

filepaの分割について( '\\')[: - 1]) '? '\\'。join(filepath.split( '\\')[: - 1])'?最後に '1'を変更すると、さらに後ろに移動することができます –

+0

@Ev Kounis:' os.path.dirname'はそれをより良くします。 –

+0

@ Jean-FrançoisFabreそれをありがとう!私は答えに組み込んだ。 –

答えて

1

これはいかがですか?

example_dir = r'C:\Users\****\Desktop\PythonScripts\ResidualCreation' 

def move_back_dir(a_dir, steps=1): 
    return '\\'.join(a_dir.split('\\')[:-steps]) 

print(move_back_dir(example_dir))  # -> C:\Users\****\Desktop\PythonScripts 
print(move_back_dir(example_dir, 2)) # -> C:\Users\****\Desktop 

やコメントで示唆したように、次のように再帰的な方法でos.path.dirname()を実装:

def move_back_dir(a_dir, steps=1): 
    for i in range(steps): 
     a_dir = os.path.dirname(a_dir) 
    return a_dir 

print(move_back_dir(example_dir))  # -> C:\Users\****\Desktop\PythonScripts 
print(move_back_dir(example_dir, 2)) # -> C:\Users\****\Desktop 

あなたが戻りたいフォルダの数を設定した場合(stepで上記の例)は必要ありません。os.path.dirname(filename)

+0

os.path.dirname()が私のために働いてくれました、ありがとう! – RayBae

+0

ありがとうございますが、@ Jean-FrançoisFabreです –

0

実際にはos.chdirであり、sys.path.insertではありません。

あなたに完全な答えを与えるには、残りのクラスを見る必要があります。具体的には、self.lbself.filesにあるものを知っていなければなりません。

+0

残念なことに私のプログラムはかなり時間がかかり、複数のローカルファイルを取得します – RayBae

関連する問題