Python:Changing if 语句末尾的路径
Python:Changing path at the end of if statement
我的图形用户界面目前有一个组合框,可以选择四个不同的文件位置。选择该目录中的每个文件后,将显示在列表框中:
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])
但是我的路径不是最优的,因为该函数不会 return 到父目录,而是停留在该文件夹中(例如,如果 current==1,该目录将在 ...\folder1 中)。为了让它工作,我需要在每条语句的末尾向下移动一个目录。我查看了相关问题并遇到了 os.chdir('..')
。出于某种原因,我在实施时遇到了麻烦。关于如何在每个语句末尾向下移动一个目录的任何想法。
确实你应该使用 os.chdir
而不是 sys.path.insert
。
为了给您一个完整的答案,需要查看您的 class 的其余部分。更具体地说,必须知道 self.lb
和 self.files
中的内容以及填充它的逻辑。
这个怎么样?
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)
我的图形用户界面目前有一个组合框,可以选择四个不同的文件位置。选择该目录中的每个文件后,将显示在列表框中:
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])
但是我的路径不是最优的,因为该函数不会 return 到父目录,而是停留在该文件夹中(例如,如果 current==1,该目录将在 ...\folder1 中)。为了让它工作,我需要在每条语句的末尾向下移动一个目录。我查看了相关问题并遇到了 os.chdir('..')
。出于某种原因,我在实施时遇到了麻烦。关于如何在每个语句末尾向下移动一个目录的任何想法。
确实你应该使用 os.chdir
而不是 sys.path.insert
。
为了给您一个完整的答案,需要查看您的 class 的其余部分。更具体地说,必须知道 self.lb
和 self.files
中的内容以及填充它的逻辑。
这个怎么样?
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)