回答編集履歴

6

edit

2017/11/24 10:08

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -44,6 +44,8 @@
44
44
 
45
45
  ```python
46
46
 
47
+ import os
48
+
47
49
  folders = [folder for folder, subfolders, files in os.walk('root') if sum([f.endswith('.txt') for f in files]) > 0]
48
50
 
49
51
  ```

5

edit

2017/11/24 10:08

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import glob
6
6
 
7
- folders = set([f.split('/')[0] for f in glob.glob('*/*.txt')])
7
+ folders = set([f.split('/')[1] for f in glob.glob('root/*/*.txt')])
8
8
 
9
9
  ```
10
10
 

4

add

2017/11/24 09:59

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -32,10 +32,18 @@
32
32
 
33
33
  folders = []
34
34
 
35
- for folder, subfolders, files in os.walk('.'):
35
+ for folder, subfolders, files in os.walk('root'):
36
36
 
37
37
  if sum([f.endswith('.txt') for f in files]) > 0:
38
38
 
39
39
  folders.append(folder)
40
40
 
41
41
  ```
42
+
43
+ これを一行に書くと
44
+
45
+ ```python
46
+
47
+ folders = [folder for folder, subfolders, files in os.walk('root') if sum([f.endswith('.txt') for f in files]) > 0]
48
+
49
+ ```

3

add

2017/11/24 09:55

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -21,3 +21,21 @@
21
21
  例えばtxtファイルの数が大量の場合この方法は不利です。
22
22
 
23
23
  最初にtxtファイルを見つけた時点でその親フォルダを含めるように書くべきでしょう。
24
+
25
+
26
+
27
+ どうしてもos.walkを使いたいのなら
28
+
29
+ ```python
30
+
31
+ import os
32
+
33
+ folders = []
34
+
35
+ for folder, subfolders, files in os.walk('.'):
36
+
37
+ if sum([f.endswith('.txt') for f in files]) > 0:
38
+
39
+ folders.append(folder)
40
+
41
+ ```

2

tui

2017/11/24 09:53

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
File without changes

1

追記

2017/11/24 09:52

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -7,3 +7,17 @@
7
7
  folders = set([f.split('/')[0] for f in glob.glob('*/*.txt')])
8
8
 
9
9
  ```
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ ※Python3xの場合os.walkの返り値はジェネレータの気がします。
18
+
19
+
20
+
21
+ 例えばtxtファイルの数が大量の場合この方法は不利です。
22
+
23
+ 最初にtxtファイルを見つけた時点でその親フォルダを含めるように書くべきでしょう。