从用户加载目录中的文件

时间:2017-11-28 21:23:38

标签: python user-interface tkinter directory uploading

我正在尝试从目录中加载大量文件。我曾经能够通过这个

来做到这一点
#directory where all data will be stored
dataDir="C:/Users/me/Desktop/Data/"
Files=[] #list of files
for file in os.listdir(dataDir):
    Files.append(scipy.io.loadmat(dataDir+file))

但是现在,我正在尝试让用户选择文件夹,所以我有这个:

import tkinter
from tkinter import filedialog
from tkinter import *

root=tkinter.Tk()
filename=filedialog.askdirectory(parent=root,title='Choose a file')
print (filename)


#directory where all data will be stored
dataDir=('%s',filename)
Files=[] #list of files
for file in os.listdir(dataDir):
    Files.append(scipy.io.loadmat(dataDir+file))

它给了我这个错误: “对于os.listdir(dataDir)中的文件: TypeError:listdir:path应该是string,bytes,os.PathLike或None,不是元组)

我尝试通过执行str(filename)将文件名转换为字符串,但它仍然不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

定义dataDir = ('%s', filename)时,您正在创建一个包含两个元素的元组。一个是'%s',另一个是filename的值。

如果我理解正确,你应该使用dataDir = '%s' % filename。这样dataDir将是一个值为filename的字符串。

答案 1 :(得分:0)

您可以在命令

中创建元组
dataDir=('%s',filename) 

并在listdir(dataDir)中使用它,期望字符串

直接在filename

中使用listdir
 for file in os.listdir(filename):

答案 2 :(得分:0)

错误表明您提供的路径listdir应为str,并且您为其指定了tuple

使用dataDir=('%s',filename)dataDir是一个包含两个字符串的元组。但是,文件名已经是str。而不是os.listdir(dataDir),请尝试os.listdir(filename)

您需要import os