回答編集履歴

8

追記

2018/08/03 20:51

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -68,7 +68,9 @@
68
68
 
69
69
  **モジュールの事はまず忘れてください。**まず一連のファイル名を取得する関数を作ります。
70
70
 
71
- 拡張子を指定してファイル一覧を取得にはos.globが使えます。
71
+ 拡張子を指定してファイル一覧を取得には[glob.glob](https://docs.python.org/ja/2.7/library/glob.html)が使えます。
72
+
73
+ ◇参考情報
72
74
 
73
75
  [Pythonでフォルダ内のファイルリストを取得する](https://qiita.com/amowwee/items/e63b3610ea750f7dba1b)
74
76
 

7

Python 2.7 環境なので、変更。

2018/08/03 20:51

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -62,7 +62,9 @@
62
62
 
63
63
 
64
64
 
65
- Pythonのバージョンが分かりませんでしたので、バージョンに限定されない書き方にします。
65
+ ~~Pythonのバージョンが分かりませんでしたので、バージョンに限定されない書き方にします。~~
66
+
67
+ 失礼しました、質問文にバージョン2.7と書いてありました。
66
68
 
67
69
  **モジュールの事はまず忘れてください。**まず一連のファイル名を取得する関数を作ります。
68
70
 
@@ -88,17 +90,21 @@
88
90
 
89
91
  """
90
92
 
91
- # glob.globの結果はlistなので拡張子以外に除外したいファイルがあれば、
92
-
93
- # glob.globの結果をこの関数内でループで回して、除外ファイル以外をyieldとしてくださいな。
94
-
95
- return glob.glob(path + "/*" + ext)
93
+ for file_name in sorted(glob.glob(path + "/*" + ext)):
94
+
95
+ # 同じ拡張子で除外したいファイルがもしあれば、この位置でif文で判断してください。
96
+
97
+ print(file_name)
98
+
99
+ # ファイル名を1個ずつyieldで返す。
100
+
101
+ yield file_name
96
102
 
97
103
 
98
104
 
99
105
  # 呼び出し方法
100
106
 
101
- print(extract_files("./codes", ".js"))
107
+ print(list(extract_files("./codes", ".js")))
102
108
 
103
109
  ```
104
110
 
@@ -124,15 +130,9 @@
124
130
 
125
131
 
126
132
 
127
- ```Python
128
-
129
- # f.writeの部分は"/" * 24が使えるかと
130
-
131
- f.write("/" * 24 + '\n//page//' + os.path.basename(file_name) + '\n' + file_data.read() + '\n')
132
-
133
- ```
134
-
135
- その後、`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
133
+ その後、上記関数を`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
134
+
135
+ この手順でモジュール化ができます。
136
136
 
137
137
 
138
138
 
@@ -160,9 +160,15 @@
160
160
 
161
161
  :params ext 拡張子
162
162
 
163
+ :return ファイル名
164
+
163
- """
165
+ """
164
-
166
+
165
- return glob.glob(path + "/*" + ext)
167
+ for file_name in glob.iglob(path + "/*" + ext):
168
+
169
+ print(file_name)
170
+
171
+ yield file_name
166
172
 
167
173
 
168
174
 
@@ -170,7 +176,7 @@
170
176
 
171
177
  def main():
172
178
 
173
- print(extract_files("./codes", ".js"))
179
+ print(list(extract_files("./codes", ".js")))
174
180
 
175
181
 
176
182
 

6

追記

2018/08/03 20:48

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -88,6 +88,10 @@
88
88
 
89
89
  """
90
90
 
91
+ # glob.globの結果はlistなので拡張子以外に除外したいファイルがあれば、
92
+
93
+ # glob.globの結果をこの関数内でループで回して、除外ファイル以外をyieldとしてくださいな。
94
+
91
95
  return glob.glob(path + "/*" + ext)
92
96
 
93
97
 

5

サンプルコードを追加

2018/08/03 11:56

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -129,3 +129,87 @@
129
129
  ```
130
130
 
131
131
  その後、`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
132
+
133
+
134
+
135
+ ---
136
+
137
+ 以下はサンプルコードです。
138
+
139
+ extract.py
140
+
141
+ ```Python
142
+
143
+ # -*- coding: utf-8 -*-
144
+
145
+ import glob
146
+
147
+
148
+
149
+
150
+
151
+ def extract_files(path, ext):
152
+
153
+ """
154
+
155
+ :params path 検索フォルダ
156
+
157
+ :params ext 拡張子
158
+
159
+ """
160
+
161
+ return glob.glob(path + "/*" + ext)
162
+
163
+
164
+
165
+
166
+
167
+ def main():
168
+
169
+ print(extract_files("./codes", ".js"))
170
+
171
+
172
+
173
+
174
+
175
+ if __name__ == "__main__":
176
+
177
+ main()
178
+
179
+ ```
180
+
181
+ javascript_kindle.py
182
+
183
+ ```Python
184
+
185
+ # -*- coding: utf-8 -*-
186
+
187
+ import os
188
+
189
+ import extract
190
+
191
+
192
+
193
+
194
+
195
+ def main():
196
+
197
+ with open('./output.txt', 'w+') as f:
198
+
199
+ for file_name in extract.extract_files("./codes", ".js"):
200
+
201
+ with open(file_name, 'r') as file_data:
202
+
203
+ f.write('/' * 24 + '\n//page//' + os.path.basename(file_name) + '\n' + file_data.read() + '\n')
204
+
205
+
206
+
207
+
208
+
209
+ if __name__ == "__main__":
210
+
211
+ main()
212
+
213
+
214
+
215
+ ```

4

追記

2018/08/03 11:53

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -55,3 +55,77 @@
55
55
  ◇参考情報
56
56
 
57
57
  [global 文](https://docs.python.jp/3/reference/simple_stmts.html#global)
58
+
59
+
60
+
61
+ ---
62
+
63
+
64
+
65
+ Pythonのバージョンが分かりませんでしたので、バージョンに限定されない書き方にします。
66
+
67
+ **モジュールの事はまず忘れてください。**まず一連のファイル名を取得する関数を作ります。
68
+
69
+ 拡張子を指定してファイル一覧を取得にはos.globが使えます。
70
+
71
+ [Pythonでフォルダ内のファイルリストを取得する](https://qiita.com/amowwee/items/e63b3610ea750f7dba1b)
72
+
73
+ ```Python
74
+
75
+ import glob
76
+
77
+ import os
78
+
79
+
80
+
81
+ def extract_files(path, ext):
82
+
83
+ """
84
+
85
+ :params path 検索フォルダ
86
+
87
+ :params ext 拡張子
88
+
89
+ """
90
+
91
+ return glob.glob(path + "/*" + ext)
92
+
93
+
94
+
95
+ # 呼び出し方法
96
+
97
+ print(extract_files("./codes", ".js"))
98
+
99
+ ```
100
+
101
+
102
+
103
+ 次にこの関数を使ってforループで回します。
104
+
105
+ ```Python
106
+
107
+ with open('./output.txt', 'w+') as f:
108
+
109
+ for file_name in extract_files("./codes", ".js"):
110
+
111
+ print("/" * 24)
112
+
113
+ print(file_name)
114
+
115
+ print(os.path.basename(file_name))
116
+
117
+
118
+
119
+ ```
120
+
121
+
122
+
123
+ ```Python
124
+
125
+ # f.writeの部分は"/" * 24が使えるかと
126
+
127
+ f.write("/" * 24 + '\n//page//' + os.path.basename(file_name) + '\n' + file_data.read() + '\n')
128
+
129
+ ```
130
+
131
+ その後、`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。

3

追記

2018/08/03 11:45

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  ```
12
12
 
13
- `javascript_kindle.py`は変数:`filelistname`をモジュールレベルで定義していなく かつ `extract_last`の呼び出しを行っていないため、`global`(モジュールレベル)で変数定義できてないです。
13
+ `extract.py`は変数:`filelistname`をモジュールレベルで定義していなく かつ `javascript_kindle.py`は`extract_last`の呼び出しを行っていないため、`global`(モジュールレベル)で変数定義できてないです。
14
14
 
15
15
 
16
16
 
@@ -18,13 +18,17 @@
18
18
 
19
19
  案1,`extract_last`関数を呼び出してから変数を使用する。
20
20
 
21
- 案2,モジュールレベルで変数を定義する
21
+ 案2,モジュールレベルで変数を先に定義しておく
22
22
 
23
+
24
+
23
- ※スクリプトのやりたいことがよく分かりませんが、`extract_last`関数の`return`で値を返すのはだめなのでしょうか?
25
+ **※スクリプトのやりたいことがよく分かりませんが、`extract_last`関数の`return`で値を返すのはだめなのでしょうか?**
24
26
 
25
27
 
26
28
 
27
29
  案2の対応です。
30
+
31
+ `extract.py`側
28
32
 
29
33
  ```Python
30
34
 
@@ -38,6 +42,16 @@
38
42
 
39
43
  ```
40
44
 
45
+ `javascript_kindle.py`側
46
+
47
+ ```Python
48
+
49
+ # 変数:indexにモジュール名(extract)が付いていないので追加
50
+
51
+ file_data = open('./codes/page' + str(i) + extract.filelistname[extract.index:], 'r')
52
+
53
+ ```
54
+
41
55
  ◇参考情報
42
56
 
43
57
  [global 文](https://docs.python.jp/3/reference/simple_stmts.html#global)

2

追記

2018/08/02 23:22

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  案1,`extract_last`関数を呼び出してから変数を使用する。
20
20
 
21
- 案2,グロル変数を定義する。
21
+ 案2,モジュールレベルで変数を定義する。
22
22
 
23
- ※スクリプトのやりたいことがよく分かりませんが、関数のreturnで値を返すのはだめなのでしょうか?
23
+ ※スクリプトのやりたいことがよく分かりませんが、`extract_last`関数の`return`で値を返すのはだめなのでしょうか?
24
24
 
25
25
 
26
26
 

1

追記

2018/08/02 23:14

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,17 +1,43 @@
1
- 質問文のスクリプトのやりたいことがよく分かりませんが。
1
+ ```Python
2
2
 
3
+ def extract_last():
4
+
5
+ filelist = os.listdir("./codes")
6
+
3
- global(モジュールレベル)で変数定義できてないです。
7
+ global filelistname
8
+
9
+ filelistname = filelist[0] # extract_last関数の呼び出しのこの行でグローバル変数が定義される。
10
+
11
+ ```
12
+
13
+ `javascript_kindle.py`は変数:`filelistname`をモジュールレベルで定義していなく かつ `extract_last`の呼び出しを行っていないため、`global`(モジュールレベル)で変数定義できてないです。
4
14
 
5
15
 
6
16
 
17
+ ◇対応案
18
+
19
+ 案1,`extract_last`関数を呼び出してから変数を使用する。
20
+
21
+ 案2,グローバル変数を定義する。
22
+
23
+ ※スクリプトのやりたいことがよく分かりませんが、関数のreturnで値を返すのはだめなのでしょうか?
24
+
25
+
26
+
27
+ 案2の対応です。
28
+
7
29
  ```Python
8
30
 
9
- filelistname = ""
31
+ filelistname = "" # PEP8に従うのなら、変数名は大文字で。
10
32
 
11
- index = 0
33
+ index = 0 #
12
34
 
13
35
  def extract_last():
14
36
 
15
37
  # 以下省略
16
38
 
17
39
  ```
40
+
41
+ ◇参考情報
42
+
43
+ [global 文](https://docs.python.jp/3/reference/simple_stmts.html#global)