回答編集履歴
8
追記
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 環境なので、変更。
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
|
-
re
|
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
|
-
re
|
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
追記
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
サンプルコードを追加
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
追記
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
追記
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
```
|
12
12
|
|
13
|
-
`
|
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
追記
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
追記
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)
|