回答編集履歴

2

行出力を深さ優先にしたコードを追記

2020/11/05 13:27

投稿

lehshell
lehshell

スコア1156

test CHANGED
@@ -63,3 +63,95 @@
63
63
  print(path_df)
64
64
 
65
65
  ```
66
+
67
+ 行出力を深さ優先にしたコード
68
+
69
+ ```Python
70
+
71
+ import pandas as pd
72
+
73
+ import os
74
+
75
+
76
+
77
+ def make_pathlist(path):
78
+
79
+ pathlist = []
80
+
81
+ for curDir, dirs, files in os.walk(path):
82
+
83
+ dum = curDir.count('\') - org.count('\')
84
+
85
+ for a_dir in dirs:
86
+
87
+ pathlist.append([curDir] + [''] * dum + [a_dir])
88
+
89
+ for a_file in files:
90
+
91
+ pathlist.append([curDir] + [''] * dum + [a_file])
92
+
93
+ mx = max(len(s) for s in pathlist)
94
+
95
+ return [s + [''] * (mx - len(s)) for s in pathlist]
96
+
97
+
98
+
99
+ def conv_to_depthfirst(pathlist):
100
+
101
+ for i in range(len(pathlist)):
102
+
103
+ for j in range(1, len(pathlist[i])):
104
+
105
+ dir = os.path.join(pathlist[i][0], pathlist[i][j])
106
+
107
+ if pathlist[i][j] and os.path.isdir(dir):
108
+
109
+ zs = ze = 0
110
+
111
+ for k in range(i+1, len(pathlist)):
112
+
113
+ if pathlist[k][0].find(dir) >= 0:
114
+
115
+ if zs == 0:
116
+
117
+ zs = ze = k
118
+
119
+ else:
120
+
121
+ ze = k
122
+
123
+ else:
124
+
125
+ if zs > 0:
126
+
127
+ break
128
+
129
+ if zs > i + 1:
130
+
131
+ # zs ~ ze を i と i + 1 の間に挿入する
132
+
133
+ return conv_to_depthfirst(pathlist[0:i+1] + pathlist[zs:ze+1] + pathlist[i+1:zs] + pathlist[ze+1:])
134
+
135
+ return pathlist
136
+
137
+
138
+
139
+ org = path = os.getcwd()
140
+
141
+ print("working directory is" , path)
142
+
143
+ # ディレクトリ階層+中身 が各列に入る2次元リストを作る
144
+
145
+ pathlist = make_pathlist(path)
146
+
147
+ pathlist = conv_to_depthfirst(pathlist) # 深さ優先順に変換
148
+
149
+
150
+
151
+ # 作った2次元リストをデータフレームにする
152
+
153
+ path_df = pd.DataFrame(pathlist)
154
+
155
+ print(path_df)
156
+
157
+ ```

1

コメント追加と code をスマートに改善

2020/11/05 13:27

投稿

lehshell
lehshell

スコア1156

test CHANGED
@@ -1,3 +1,5 @@
1
+ 提示されている実行結果から、環境は Windows と推定しています。
2
+
1
3
  ```Python
2
4
 
3
5
  import pandas as pd
@@ -32,7 +34,9 @@
32
34
 
33
35
  #pathlist.append(leaf)
34
36
 
35
- dum = 0 if curDir == org else len(curDir[len(org)+1:].split('\'))
37
+ #dum = 0 if curDir == org else len(curDir[len(org)+1:].split('\'))
38
+
39
+ dum = curDir.count('\') - org.count('\') # コードを改善
36
40
 
37
41
  for a_dir in dirs:
38
42