回答編集履歴

4

修正

2017/12/14 17:08

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -24,15 +24,13 @@
24
24
 
25
25
 
26
26
 
27
- かなり泥臭いですが、小回りは利くかと思います。
28
-
29
- もっとすっきり書く方法もあるような気もしますが...
27
+ かなり泥臭く、もっとすっきり書く方法もあるような気もしますが、小回りは利くかと思います。
30
28
 
31
29
 
32
30
 
33
31
  ---
34
32
 
35
- 例をちょっと改良してみました。これはor検索の場合ですね。
33
+ 例をちょっと改良してみました。
36
34
 
37
35
  ```Python
38
36
 

3

追記

2017/12/14 17:08

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -42,23 +42,43 @@
42
42
 
43
43
  search_words = input('input words: ').split()
44
44
 
45
+ search_mode = input('search mode(OR/AND): ')
46
+
45
47
 
46
48
 
47
49
  def make_is_target(words):
48
50
 
49
- def is_target(filename):
51
+ def is_target_or(filename):
50
52
 
51
- for word in words:
52
-
53
- if word in filename: return True
53
+ return any(word in filename for word in words)
54
-
55
- return False
56
-
57
- return is_target
58
54
 
59
55
 
60
56
 
57
+ def is_target_and(filename):
58
+
59
+ return all(word in filename for word in words)
60
+
61
+
62
+
63
+ return is_target_or, is_target_and
64
+
65
+
66
+
67
+
68
+
69
+ if search_mode == 'OR':
70
+
61
- is_target = make_is_target(search_words)
71
+ is_target = make_is_target(search_words)[0]
72
+
73
+ elif search_mode == 'AND':
74
+
75
+ is_target = make_is_target(search_words)[1]
76
+
77
+ else:
78
+
79
+ is_target = lambda _: False
80
+
81
+
62
82
 
63
83
  target_files = [file for file in glob.iglob('*.*') if is_target(file)]
64
84
 
@@ -72,8 +92,32 @@
72
92
 
73
93
  ```
74
94
 
95
+ >python hoge.py
96
+
75
97
  input words: java py
98
+
99
+ search mode(OR/AND): OR
76
100
 
77
101
  ['Bikkuri.java', 'classtree.py', 'hoge.py', 'Main.java']
78
102
 
103
+
104
+
105
+ >python hoge.py
106
+
107
+ input words: java py
108
+
109
+ search mode(OR/AND): AND
110
+
111
+ []
112
+
113
+
114
+
115
+ >python hoge.py
116
+
117
+ input words: hoge py
118
+
119
+ search mode(OR/AND): AND
120
+
121
+ ['hoge.py']
122
+
79
123
  ```

2

追記

2017/12/14 16:30

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ---
34
34
 
35
- 例をちょっと改良してみました。
35
+ 例をちょっと改良してみました。これはor検索の場合ですね。
36
36
 
37
37
  ```Python
38
38
 

1

追記

2017/12/14 16:06

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -1,4 +1,6 @@
1
- [glob.iglob](https://docs.python.jp/3/library/glob.html#glob.iglob)を用いると融通が効くかもしれません。以下、即興で書いた使用例です。
1
+ [glob.iglob](https://docs.python.jp/3/library/glob.html#glob.iglob)を用いるとメモリを食いませんし、融通が効くかもしれません。
2
+
3
+ 以下、即興で書いた使用例です。
2
4
 
3
5
  ```Python
4
6
 
@@ -23,3 +25,55 @@
23
25
 
24
26
 
25
27
  かなり泥臭いですが、小回りは利くかと思います。
28
+
29
+ もっとすっきり書く方法もあるような気もしますが...
30
+
31
+
32
+
33
+ ---
34
+
35
+ 例をちょっと改良してみました。
36
+
37
+ ```Python
38
+
39
+ import glob
40
+
41
+
42
+
43
+ search_words = input('input words: ').split()
44
+
45
+
46
+
47
+ def make_is_target(words):
48
+
49
+ def is_target(filename):
50
+
51
+ for word in words:
52
+
53
+ if word in filename: return True
54
+
55
+ return False
56
+
57
+ return is_target
58
+
59
+
60
+
61
+ is_target = make_is_target(search_words)
62
+
63
+ target_files = [file for file in glob.iglob('*.*') if is_target(file)]
64
+
65
+ print(target_files)
66
+
67
+ ```
68
+
69
+
70
+
71
+ **実行例**
72
+
73
+ ```
74
+
75
+ input words: java py
76
+
77
+ ['Bikkuri.java', 'classtree.py', 'hoge.py', 'Main.java']
78
+
79
+ ```