python-フォルダの下にあるすべてのサブフォルダとファイル名を巡回します.


「次元を上げ、抽象的になってこそ、低次元の物事の本質を見極めることができる」.-プラトニック-理想の国
 
質問:
システムのフォルダの下にあるすべてのサブフォルダとファイルを巡り、サブフォルダのファイルの名前を出力します.
ソリューション:
システムフォルダのパスを取得し、辞書を作成します.
現在のフォルダの下にあるフォルダとファイルをリストします.フォルダは辞書のkey 1、ファイルは辞書のkey 2として保存されます.
辞書の各フォルダとファイルを巡回
ディスカッション:
ファイル/フォルダ名が漢字の場合、テストは行われません.
キーに基づいて、現在のキーとそのキーを親とするすべてのサブディレクトリとサブファイルをすばやく検索する方法は、実装されていません.
パッケージ性が悪く、classと独立関数が混合されています.
 
ソース:
# coding=utf-8

from __future__ import print_function
from __future__ import with_statement
import os
import sys

class traverse_name():
    def __init__(self, path, father_dir):
        self.path = path + father_dir

    def show_name(self):
        '''              '''
        # print(os.listdir(self.path))
        list0 = os.listdir(self.path)
        # print(os.walk(self.path))
        list_dir = []
        list_file = []
        for i in list0:
            if os.path.isdir(self.path + '\\' + i):
                list_dir.append(i)
            else:
                list_file.append(i)
        return list_dir, list_file

def iter_dir(abs_path, dir_father_path, dir_res):
    if 0 == len(dir_res[dir_father_path]['dir']): #          
        return 0

    for dir in dir_res[dir_father_path]['dir']:  # \\A
        dir_son_path = dir_father_path + '\\' + dir  # \\A\\A1
        dir_res[dir_son_path] = dict()
        traverse = traverse_name(abs_path, dir_son_path) # abs_path    , dir_path    
        dir_res[dir_son_path]['dir'], dir_res[dir_son_path]['file'] = traverse.show_name()
        # if 0 != len(dir_res[dir_path]['dir']): #          
        #     for dir_son_path in dir_res[dir_path]['dir']:
        #         dir_path = dir_father_path + '\\' + dir_son_path
        iter_dir(abs_path, dir_son_path, dir_res) #          

def show_res(result):
    print(result)
    list0 = []
    for key in result: #      key
        # print(len(key))
        list0.append((len(key), key))
        list0.sort()
        # print(list0)
    for i in range(0,len(list0),1):
        key = list0[i][1]
        print('',key)
        print('    ', result[key]['dir'] )
        print('    ', result[key]['file'])

if __name__ == '__main__':
    # filename = '1.txt'
    # os.remove(filename)
    # print(os.getcwd())
    # f = open(filename, 'w+')
    # f.writelines('a
')
# f.writelines('ab
')
# f.writelines('abc
')
# f.close() # f = open(filename, 'r+') # print(f.readline()) # print(f.readline()) # print(f.readline()) # print(f.readline()) # print(f.readline()) # f.close() # list = os.listdir(dir) # # if os.path.isdir(filepath): # filepath # os.path.isfile(path): # elif os.path: # filepath # os.walk(path), path, , # , # (' x'[ x list]x ) # os.path.join(name) # path = sys.path[0] result = dict() abs_path = os.getcwd() # path = sys.path[0] father_dir = '\A' traverse = traverse_name(abs_path,father_dir) result[father_dir] = dict() result[father_dir]['dir'], result[father_dir]['file'] = traverse.show_name() iter_dir(abs_path, father_dir, result) show_res(result) ''' {'\\A\\A1\\A12\\A121': {'file': [], 'dir': []}, '\\A\\A2\\A21\\A211': {'file': [], 'dir': []}, '\\A\\A1': {'file': ['A11.txt', 'A12.txt'], 'dir': ['A11', 'A12']}, '\\A\\A2\\A21': {'file': ['A211.txt'], 'dir': ['A211']}, '\\A\\A3': {'file': [], 'dir': []}, '\\A\\A2': {'file': [], 'dir': ['A21']}, '\\A': {'file': ['A1.txt', 'A2.txt', 'A3.txt'], 'dir': ['A1', 'A2', 'A3']}, '\\A\\A1\\A12': {'file': ['A121.txt'], 'dir': ['A121']}, '\\A\\A1\\A11': {'file': ['A111.txt'], 'dir': []}} \A ['A1', 'A2', 'A3'] ['A1.txt', 'A2.txt', 'A3.txt'] \A\A1 ['A11', 'A12'] ['A11.txt', 'A12.txt'] \A\A2 ['A21'] [] \A\A3 [] [] \A\A1\A11 [] ['A111.txt'] \A\A1\A12 ['A121'] ['A121.txt'] \A\A2\A21 ['A211'] ['A211.txt'] \A\A1\A12\A121 [] [] \A\A2\A21\A211 [] [] '''