2017-11-28 9 views
0

ディレクトリからたくさんのファイルをロードしようとしています。私はこのユーザーのディレクトリからファイルをロードする

#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:パスが文字列である必要があり、バイト、os.PathLikeまたはNoneは、タプルではない)

は、私は(文字列の操作を実行して文字列にファイル名を作ってみましたファイル名)、それはまだ動作しません。任意のアイデア?

+0

"filename"はすでに文字列です。パス区切り文字を追加するだけです。私はあなたにPythonにそれをさせることをお勧めします: 'Files.append(scipy.io.loadmat(os.path.join(filename、file)))'。 – Novel

+0

'( '%s'、filename)'はタプルです。おそらく '%s"%filename'を意味していたでしょうか?しかし、なぜあなたは単に 'dataDir = filename'をしないのか分かりません。 –

答えて

0

あなたはコマンドで

dataDir=('%s',filename) 

をタプルを作成し、文字列

使用filenameが直接listdir

for file in os.listdir(filename): 
+0

私はそれを行い、すべてのインスタンスに対してdataDirの代わりにファイル名を使用しましたが、今は [Errno 13]が拒否されました: 'C:/ Users/me/Desktop/Data /' –

+0

これはPythonの問題ではありませんが、 。あなたはこのフォルダにアクセスする権限を持っていないか、フォルダにアクセスできない別のユーザとしてスクリプトを実行します – furas

0

dataDir = ('%s', filename)を定義すると、2つの要素を持つタプルが作成されます。 1つは'%s'で、もう1つはfilenameです。

私が正しく理解している場合は、dataDir = '%s' % filenameを使用してください。そうすれば、dataDirfilenameという値の文字列になります。

0

にエラーがパスはあなたがlistdirを与えると述べて期待listdir(dataDir)でそれを使用しますstrで、あなたにはとしてください0。

dataDir=('%s',filename)の場合、dataDirは2つの文字列を含むタプルです。ただし、ファイル名はすでにstrです。 os.listdir(dataDir)の代わりにos.listdir(filename)を試してください。

import osが必要です。

関連する問題