1

Python バージョン: 2.7 Tk バージョン: 8.5

ダイアログ ウィンドウから選択したファイルを辞書に追加する方法については、前の質問を参照してください。

ダイアログ ウィンドウから 500 個のファイルを選択し、その名前を辞書のキーとして抽出しようとしています。合計ファイル サイズは約 200M です。空の辞書を取得した理由がわかりません。ただし、毎回 100 などの少ないファイルを選択すると、毎回非常にうまく機能します。私の質問は、ファイルを選択するダイアログ ウィンドウまたは辞書内のキーに数量制限があるということです。

sys.path.append("C:\MY PATH")
os.environ['PATH']+=";C:\MY PATH"

print "Please select your txt files in the dialog window >>"
filez = tkFileDialog.askopenfilenames(parent=root,multiple='multiple',title='Choose a file',filetypes=[('txt file','.txt'),('All files','.*')])

mydict = {}
for FilenameWithPath in filez:
    path, Filename = os.path.split(str(FilenameWithPath))
##    Filename = sys.path.basename(FilenameWithPath)
    mydict[Filename] = len(mydict)
print "mydict " + str(mydict)   
print "\n"

500 個のファイルすべてを選択すると、

mydict {}

解決策はありますか?ありがとう。

4

1 に答える 1

2

問題がどこにあるかがわかると思います。少しデバッグを行ったところ、filez に返されるデータ型が Unicode 文字列であることがわかりました (リストまたはタプルが必要なようです)。

ループの前にこれを変換する必要があります。ファイル名にスペースが含まれていない場合、これは次の簡単な問題です。

file_list = files.split()

ただし、これが当てはまらない場合、上記は機能せず、スペースを含むファイル名は中括弧 {} で囲まれます。

このページによると、これは実際にはバグである可能性があります。ただし、文字列をタプルに変換する回避策も提案されています。

file_list=  master.tk.splitlist(filez)

お役に立てれば。

于 2013-07-25T17:31:46.573 に答える