2017-12-28 8 views
-4

私は確定的なファイルを読むための関数を書いています。この場合、ユーザーは読みたいファイルを選択することができます。ビルドPython Dict

import os 
import pprint as p 

path = "C:\Users\cgr02\Documents\Py" 
listname = {} 

for root, dirs, files in os.walk(path): 
for filename in files: 
    if filename.endswith(".xlsx"): 
    ob = listanome.setdefault(filename, dict({'FILE': filename})) 

p.pprint (listname) 

出力:

'19-10-2017.xlsx': {'FILE': '19-10-2017.xlsx'}, 
'19-11-2017.xlsx': {'FILE': '19-11-2017.xlsx'}, 
'20-06-2017.xlsx': {'FILE': '20-06-2017.xlsx'}, 
'20-07-2017.xlsx': {'FILE': '20-07-2017.xlsx'}, 
'20-08-2017.xlsx': {'FILE': '20-08-2017.xlsx'}, 
'20-09-2017.xlsx': {'FILE': '20-09-2017.xlsx'}, 
'20-10-2017.xlsx': {'FILE': '20-10-2017.xlsx'}, 

ユーザーが見ることを期待するもの:

'1': {'File': '20-10-2017.xlsx'}, 
'2': {'File': '20-09-2017.xlsx'}, 
'3': {'File': '20-08-2017.xlsx'}, 
'4': {'File': '20-12-2017.xlsx'}, 
'5': {'File': '20-11-2017.xlsx'}, 

私はこれが画面に表示し、ユーザの選択を操作するためのより良い方法であれば知りません。リストを使う方が良いでしょうか?

答えて

1

はい、単純にリストを使用できます。リストの理解度を使用すると、dict.setdefaultを使用するよりも、これを少し簡単にすることができます。その後、

import os 
path = ... 
files = [filename for root, dirs, files in os.walk(path) 
     for filename in files 
     if filename.endswith(".xlsx")] 

、代わりにpprintenumerateprintを使用します:たとえば

あなたはおそらくは、あなたが実際に見つける必要がある場合はrootdirsを保存する必要があります

for idx, file in enumerate(files, 1): # enumeration, starting with 1 instead of 0 
    print(idx, file) 

注意"選択された"ファイルを再度表示します。

+0

これは素晴らしいですが、それについて知りませんでしたが、私はそれをどのように辞書に追加しましたか? "追加"? – TMoraes

+0

このソリューションでは、どのディクテーションも使用しないでください。 – MSeifert

+0

たとえば、ユーザーが選択したファイル名を復元するにはどうすればよいですか?私の考えでは、idxによって、ファイル名+パスを得ることができました。あなたはどう思いますか? – TMoraes