【问题标题】:Loading files from directory from user从用户的目录加载文件
【发布时间】:2018-05-12 11:24:23
【问题描述】:

我正在尝试从一个目录加载大量文件。我以前可以通过这个来做到这一点

#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 should be string, bytes, os.PathLike or None, not tuple)

我尝试通过 str(filename) 将文件名转换为字符串,但它仍然无法正常工作。有什么想法吗?

【问题讨论】:

  • "filename" 已经是一个字符串。您只需要添加路径分隔符。我建议你让 python 这样做:Files.append(scipy.io.loadmat(os.path.join(filename, file))).
  • ('%s', filename) 是一个元组。也许你的意思是"%s" % filename?不过,我不明白你为什么不只是做dataDir=filename

标签: python user-interface tkinter directory uploading


【解决方案1】:

你在命令中创建元组

dataDir=('%s',filename) 

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

listdir中直接使用filename

 for file in os.listdir(filename):

【讨论】:

  • 我这样做了,只是对所有实例都使用了文件名而不是 dataDir,但现在我得到 [Errno 13] Permission denied: 'C:/Users/me/Desktop/Data/'
  • 这不是 Python 问题,而是您的系统问题。您无权访问此文件夹,或者您以其他用户身份运行脚本,而该用户无权访问您的文件夹
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    错误表明您给listdir 的路径应该是str,而您给它的是tuple

    对于dataDir=('%s',filename)dataDir 是一个包含两个字符串的元组。但是,文件名已经是str。代替os.listdir(dataDir),试试os.listdir(filename)

    您需要import os

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多