回答編集履歴

5

usageについて追記

2018/01/29 17:56

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- 3,プログラムに渡された引数を元に処理を行うには標準ライブラリの[argparse](https://docs.python.jp/3/library/argparse.html)を使うと便利です。
41
+ 3,プログラムに渡された引数を元に処理を行うには標準ライブラリの[argparse](https://docs.python.jp/3/library/argparse.html)を使うと便利です。プログラムに渡す引数が足りない時はusageも表示してくれます。
42
42
 
43
43
  ```Python
44
44
 
@@ -52,6 +52,8 @@
52
52
 
53
53
  args = parser.parse_args()
54
54
 
55
+ keyword = args.keyword
56
+
55
57
  ```
56
58
 
57
59
 

4

柔らかい口調に変更。

2018/01/29 17:56

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,4 +1,8 @@
1
+ 作成されたプログラム、力作ですねー。
2
+
3
+
4
+
1
- 1,enumerateのスペルミス。IDEをインストールするとこのミスは防げるかと。
5
+ 1,enumerateのスペルミス。IDE(統合開発環境)をインストールするとこのミスは防げるかと。
2
6
 
3
7
 
4
8
 
@@ -12,7 +16,7 @@
12
16
 
13
17
 
14
18
 
15
- 2,exceptで例外を握りつぶしています。
19
+ 2,exceptで例外を全部握りつぶしています。よってtryの処理内で例外発生時は質問文のように何も表示されません。
16
20
 
17
21
  > except:
18
22
 
@@ -20,7 +24,7 @@
20
24
 
21
25
 
22
26
 
23
- Exception でcacthするのもあまり良くないのですが。
27
+ Exception で例外を全てcacthするのもあまり良くないのですが。以下のように記述すれば、例外発生時にエラーメッセージが表示されます。
24
28
 
25
29
  ```Python
26
30
 
@@ -34,9 +38,31 @@
34
38
 
35
39
 
36
40
 
41
+ 3,プログラムに渡された引数を元に処理を行うには標準ライブラリの[argparse](https://docs.python.jp/3/library/argparse.html)を使うと便利です。
42
+
43
+ ```Python
44
+
45
+ import argparse
46
+
47
+
48
+
49
+ parser = argparse.ArgumentParser()
50
+
51
+ parser.add_argument('keyword')
52
+
53
+ args = parser.parse_args()
54
+
55
+ ```
56
+
57
+
58
+
37
- 3,一つの関数内で処理を行いすぎです。テストやすいようにある程度分割するほうが良いです。
59
+ 4,一つの関数内で処理を行いすぎかと、最初はテストを行いやすいようにある程度処理を分割するほうが良いです。
38
-
60
+
61
+
62
+
39
- 関数化してlistを返すyieldを返す形にしたほうがいいです。
63
+ プログラム内でループを行っている部分があれば、関数化してlist/dictを返すようにしたり、yieldを返す形にしたほうがいいです。
64
+
65
+
40
66
 
41
67
  ```Python
42
68
 
@@ -60,7 +86,7 @@
60
86
 
61
87
  ```Python
62
88
 
63
- def find_text_file(file_path):
89
+ def find_text_file(file_path, keyword):
64
90
 
65
91
  lines = []
66
92
 
@@ -84,7 +110,7 @@
84
110
 
85
111
  ```Python
86
112
 
87
- result = find_text_file(path)
113
+ result = find_text_file(path, keyword)
88
114
 
89
115
  ```
90
116
 
@@ -92,7 +118,7 @@
92
118
 
93
119
  ---
94
120
 
95
- 以下のソースコードは上記点を変更したソースコードになります。
121
+ 以下のソースコードは上記4点を変更したソースコードになります。
96
122
 
97
123
 
98
124
 
@@ -104,11 +130,23 @@
104
130
 
105
131
  import os
106
132
 
107
-
133
+ import argparse
134
+
135
+
136
+
108
-
137
+ parser = argparse.ArgumentParser()
138
+
109
-
139
+ parser.add_argument('keyword')
140
+
110
-
141
+ args = parser.parse_args()
142
+
143
+ keyword = args.keyword
144
+
145
+
146
+
147
+
148
+
111
- def find_text_file(file_path):
149
+ def find_text_file(file_path, keyword):
112
150
 
113
151
  lines = []
114
152
 
@@ -130,18 +168,6 @@
130
168
 
131
169
 
132
170
 
133
- if len(sys.argv) <= 1:
134
-
135
- print("[USAGW]) findtext (keyword)")
136
-
137
- sys.exit(0)
138
-
139
-
140
-
141
- keyword = sys.argv[1]
142
-
143
-
144
-
145
171
  for root, dirs, files in os.walk("."):
146
172
 
147
173
  for fi in files:
@@ -152,7 +178,7 @@
152
178
 
153
179
  path = os.path.join(root, fi)
154
180
 
155
- result = find_text_file(path)
181
+ result = find_text_file(path, keyword)
156
182
 
157
183
  except Exception as ex:
158
184
 
@@ -172,4 +198,6 @@
172
198
 
173
199
  print(li) # resultに追加された行を表示
174
200
 
201
+
202
+
175
- ```
203
+ ```

3

主語が抜けていたので追記。

2018/01/29 17:52

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -56,6 +56,8 @@
56
56
 
57
57
  ```
58
58
 
59
+ 関数化してlistを返すサンプルコード
60
+
59
61
  ```Python
60
62
 
61
63
  def find_text_file(file_path):
@@ -78,7 +80,7 @@
78
80
 
79
81
  ```
80
82
 
81
- 呼び出し側
83
+ 関数の呼び出し側
82
84
 
83
85
  ```Python
84
86
 

2

補足

2018/01/29 15:45

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -85,3 +85,89 @@
85
85
  result = find_text_file(path)
86
86
 
87
87
  ```
88
+
89
+
90
+
91
+ ---
92
+
93
+ 以下のソースコードは上記3点を変更したソースコードになります。
94
+
95
+
96
+
97
+ ```Python
98
+
99
+ # -*- coding: UTF-8 -*
100
+
101
+ import sys
102
+
103
+ import os
104
+
105
+
106
+
107
+
108
+
109
+ def find_text_file(file_path):
110
+
111
+ lines = []
112
+
113
+ with open(file_path, encoding='utf-8') as f:
114
+
115
+ for no, line in enumerate(f):
116
+
117
+ if line.find(keyword) >= 0:
118
+
119
+ line = line.strip()
120
+
121
+ s = "| {0:4}: {1}".format(no + 1, line)
122
+
123
+ lines.append(s)
124
+
125
+ return lines
126
+
127
+
128
+
129
+
130
+
131
+ if len(sys.argv) <= 1:
132
+
133
+ print("[USAGW]) findtext (keyword)")
134
+
135
+ sys.exit(0)
136
+
137
+
138
+
139
+ keyword = sys.argv[1]
140
+
141
+
142
+
143
+ for root, dirs, files in os.walk("."):
144
+
145
+ for fi in files:
146
+
147
+ result = []
148
+
149
+ try:
150
+
151
+ path = os.path.join(root, fi)
152
+
153
+ result = find_text_file(path)
154
+
155
+ except Exception as ex:
156
+
157
+ print(ex)
158
+
159
+ continue
160
+
161
+
162
+
163
+ #resultに結果があれば表示する
164
+
165
+ if len(result) > 0:
166
+
167
+ print("+ file:" + fi)
168
+
169
+ for li in result:
170
+
171
+ print(li) # resultに追加された行を表示
172
+
173
+ ```

1

空行を追加!

2018/01/29 15:44

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -18,6 +18,8 @@
18
18
 
19
19
  > continue
20
20
 
21
+
22
+
21
23
  Exception でcacthするのもあまり良くないのですが。
22
24
 
23
25
  ```Python
@@ -29,6 +31,8 @@
29
31
  continue
30
32
 
31
33
  ```
34
+
35
+
32
36
 
33
37
  3,一つの関数内で処理を行いすぎです。テストしやすいようにある程度分割するほうが良いです。
34
38