我正在尝试选择多个文件夹。对于目录,我需要等效的askopenfilenames()
,但只存在askdirectory()
,只允许选择一个文件夹。
之前我发现了一个为Matlab(uigetdir
)执行此操作的自定义脚本。
在Python中这样做的任何方式?
我需要一次批量处理大约50个文件夹中的文件,逐个选择它们是不现实的。
另外,我不是程序员,只是试图处理我的地球物理数据,不能自己编码"正如我在其他地方看到的那样。 本来可以认为这样的基本内容会包含在基本功能中。
答案 0 :(得分:1)
遇到了与我开发自己的解决方案相同的问题。这样,您可以一次选择一个目录,完成后选择“取消”。
该函数返回您选择的目录的列表。
def fun_directory_selector(request_string: str, selected_directory_list: list, search_directory):
directory_path_string = filedialog.askdirectory(initialdir=search_directory, title=request_string)
if len(directory_path_string) > 0:
selected_directory_list.append(directory_path_string)
fun_directory_selector('Select the next Directory or Cancel to end',
selected_directory_list,
os.path.dirname(directory_path_string))
return selected_directory_list
答案 1 :(得分:0)
OP要求使用Tkinter的解决方案,该解决方案不可用但是wxPython-Phoenix可以提供解决方案
####### Retrieve a list of directories with wxPython-Phoenix - tested on python3.5
### installation instruction for wxPython-Phoenix : https://wiki.wxpython.org/How%20to%20install%20wxPython#Installing_wxPython-Phoenix_using_pip
### modified from : https://wxpython.org/Phoenix/docs/html/wx.lib.agw.multidirdialog.html
import os
import wx
import wx.lib.agw.multidirdialog as MDD
# Our normal wxApp-derived class, as usual
app = wx.App(0)
dlg = MDD.MultiDirDialog(None, title="Custom MultiDirDialog", defaultPath=os.getcwd(), # defaultPath="C:/Users/users/Desktop/",
agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST)
if dlg.ShowModal() != wx.ID_OK:
print("You Cancelled The Dialog!")
dlg.Destroy()
paths = dlg.GetPaths()
#Print directories' path and files
for path in enumerate(paths):
print(path[1])
directory= path[1].replace('OS (C:)','C:')
print(directory)
for file in os.listdir(directory):
print(file)
dlg.Destroy()
app.MainLoop()