回答編集履歴
8
追記
answer
CHANGED
@@ -33,7 +33,8 @@
|
|
33
33
|
~~Pythonのバージョンが分かりませんでしたので、バージョンに限定されない書き方にします。~~
|
34
34
|
失礼しました、質問文にバージョン2.7と書いてありました。
|
35
35
|
**モジュールの事はまず忘れてください。**まず一連のファイル名を取得する関数を作ります。
|
36
|
-
拡張子を指定してファイル一覧を取得には
|
36
|
+
拡張子を指定してファイル一覧を取得には[glob.glob](https://docs.python.org/ja/2.7/library/glob.html)が使えます。
|
37
|
+
◇参考情報
|
37
38
|
[Pythonでフォルダ内のファイルリストを取得する](https://qiita.com/amowwee/items/e63b3610ea750f7dba1b)
|
38
39
|
```Python
|
39
40
|
import glob
|
7
Python 2.7 環境なので、変更。
answer
CHANGED
@@ -30,7 +30,8 @@
|
|
30
30
|
|
31
31
|
---
|
32
32
|
|
33
|
-
Pythonのバージョンが分かりませんでしたので、バージョンに限定されない書き方にします。
|
33
|
+
~~Pythonのバージョンが分かりませんでしたので、バージョンに限定されない書き方にします。~~
|
34
|
+
失礼しました、質問文にバージョン2.7と書いてありました。
|
34
35
|
**モジュールの事はまず忘れてください。**まず一連のファイル名を取得する関数を作ります。
|
35
36
|
拡張子を指定してファイル一覧を取得にはos.globが使えます。
|
36
37
|
[Pythonでフォルダ内のファイルリストを取得する](https://qiita.com/amowwee/items/e63b3610ea750f7dba1b)
|
@@ -43,12 +44,14 @@
|
|
43
44
|
:params path 検索フォルダ
|
44
45
|
:params ext 拡張子
|
45
46
|
"""
|
46
|
-
# glob.globの結果はlistなので拡張子以外に除外したいファイルがあれば、
|
47
|
-
# glob.globの結果をこの関数内でループで回して、除外ファイル以外をyieldとしてくださいな。
|
48
|
-
|
47
|
+
for file_name in sorted(glob.glob(path + "/*" + ext)):
|
48
|
+
# 同じ拡張子で除外したいファイルがもしあれば、この位置でif文で判断してください。
|
49
|
+
print(file_name)
|
50
|
+
# ファイル名を1個ずつyieldで返す。
|
51
|
+
yield file_name
|
49
52
|
|
50
53
|
# 呼び出し方法
|
51
|
-
print(extract_files("./codes", ".js"))
|
54
|
+
print(list(extract_files("./codes", ".js")))
|
52
55
|
```
|
53
56
|
|
54
57
|
次にこの関数を使ってforループで回します。
|
@@ -61,11 +64,8 @@
|
|
61
64
|
|
62
65
|
```
|
63
66
|
|
64
|
-
```Python
|
65
|
-
# f.writeの部分は"/" * 24が使えるかと
|
66
|
-
f.write("/" * 24 + '\n//page//' + os.path.basename(file_name) + '\n' + file_data.read() + '\n')
|
67
|
-
```
|
68
|
-
その後、`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
|
67
|
+
その後、上記関数を`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
|
68
|
+
この手順でモジュール化ができます。
|
69
69
|
|
70
70
|
---
|
71
71
|
以下はサンプルコードです。
|
@@ -79,12 +79,15 @@
|
|
79
79
|
"""
|
80
80
|
:params path 検索フォルダ
|
81
81
|
:params ext 拡張子
|
82
|
+
:return ファイル名
|
82
83
|
"""
|
83
|
-
|
84
|
+
for file_name in glob.iglob(path + "/*" + ext):
|
85
|
+
print(file_name)
|
86
|
+
yield file_name
|
84
87
|
|
85
88
|
|
86
89
|
def main():
|
87
|
-
print(extract_files("./codes", ".js"))
|
90
|
+
print(list(extract_files("./codes", ".js")))
|
88
91
|
|
89
92
|
|
90
93
|
if __name__ == "__main__":
|
6
追記
answer
CHANGED
@@ -43,6 +43,8 @@
|
|
43
43
|
:params path 検索フォルダ
|
44
44
|
:params ext 拡張子
|
45
45
|
"""
|
46
|
+
# glob.globの結果はlistなので拡張子以外に除外したいファイルがあれば、
|
47
|
+
# glob.globの結果をこの関数内でループで回して、除外ファイル以外をyieldとしてくださいな。
|
46
48
|
return glob.glob(path + "/*" + ext)
|
47
49
|
|
48
50
|
# 呼び出し方法
|
5
サンプルコードを追加
answer
CHANGED
@@ -63,4 +63,46 @@
|
|
63
63
|
# f.writeの部分は"/" * 24が使えるかと
|
64
64
|
f.write("/" * 24 + '\n//page//' + os.path.basename(file_name) + '\n' + file_data.read() + '\n')
|
65
65
|
```
|
66
|
-
その後、`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
|
66
|
+
その後、`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
|
67
|
+
|
68
|
+
---
|
69
|
+
以下はサンプルコードです。
|
70
|
+
extract.py
|
71
|
+
```Python
|
72
|
+
# -*- coding: utf-8 -*-
|
73
|
+
import glob
|
74
|
+
|
75
|
+
|
76
|
+
def extract_files(path, ext):
|
77
|
+
"""
|
78
|
+
:params path 検索フォルダ
|
79
|
+
:params ext 拡張子
|
80
|
+
"""
|
81
|
+
return glob.glob(path + "/*" + ext)
|
82
|
+
|
83
|
+
|
84
|
+
def main():
|
85
|
+
print(extract_files("./codes", ".js"))
|
86
|
+
|
87
|
+
|
88
|
+
if __name__ == "__main__":
|
89
|
+
main()
|
90
|
+
```
|
91
|
+
javascript_kindle.py
|
92
|
+
```Python
|
93
|
+
# -*- coding: utf-8 -*-
|
94
|
+
import os
|
95
|
+
import extract
|
96
|
+
|
97
|
+
|
98
|
+
def main():
|
99
|
+
with open('./output.txt', 'w+') as f:
|
100
|
+
for file_name in extract.extract_files("./codes", ".js"):
|
101
|
+
with open(file_name, 'r') as file_data:
|
102
|
+
f.write('/' * 24 + '\n//page//' + os.path.basename(file_name) + '\n' + file_data.read() + '\n')
|
103
|
+
|
104
|
+
|
105
|
+
if __name__ == "__main__":
|
106
|
+
main()
|
107
|
+
|
108
|
+
```
|
4
追記
answer
CHANGED
@@ -26,4 +26,41 @@
|
|
26
26
|
file_data = open('./codes/page' + str(i) + extract.filelistname[extract.index:], 'r')
|
27
27
|
```
|
28
28
|
◇参考情報
|
29
|
-
[global 文](https://docs.python.jp/3/reference/simple_stmts.html#global)
|
29
|
+
[global 文](https://docs.python.jp/3/reference/simple_stmts.html#global)
|
30
|
+
|
31
|
+
---
|
32
|
+
|
33
|
+
Pythonのバージョンが分かりませんでしたので、バージョンに限定されない書き方にします。
|
34
|
+
**モジュールの事はまず忘れてください。**まず一連のファイル名を取得する関数を作ります。
|
35
|
+
拡張子を指定してファイル一覧を取得にはos.globが使えます。
|
36
|
+
[Pythonでフォルダ内のファイルリストを取得する](https://qiita.com/amowwee/items/e63b3610ea750f7dba1b)
|
37
|
+
```Python
|
38
|
+
import glob
|
39
|
+
import os
|
40
|
+
|
41
|
+
def extract_files(path, ext):
|
42
|
+
"""
|
43
|
+
:params path 検索フォルダ
|
44
|
+
:params ext 拡張子
|
45
|
+
"""
|
46
|
+
return glob.glob(path + "/*" + ext)
|
47
|
+
|
48
|
+
# 呼び出し方法
|
49
|
+
print(extract_files("./codes", ".js"))
|
50
|
+
```
|
51
|
+
|
52
|
+
次にこの関数を使ってforループで回します。
|
53
|
+
```Python
|
54
|
+
with open('./output.txt', 'w+') as f:
|
55
|
+
for file_name in extract_files("./codes", ".js"):
|
56
|
+
print("/" * 24)
|
57
|
+
print(file_name)
|
58
|
+
print(os.path.basename(file_name))
|
59
|
+
|
60
|
+
```
|
61
|
+
|
62
|
+
```Python
|
63
|
+
# f.writeの部分は"/" * 24が使えるかと
|
64
|
+
f.write("/" * 24 + '\n//page//' + os.path.basename(file_name) + '\n' + file_data.read() + '\n')
|
65
|
+
```
|
66
|
+
その後、`extract_files`関数を`extract.py`に記述を移し、`javascript_kindle.py`で`extract_files`の呼び出し部分を`extract.extract_files`に変更します。
|
3
追記
answer
CHANGED
@@ -4,19 +4,26 @@
|
|
4
4
|
global filelistname
|
5
5
|
filelistname = filelist[0] # extract_last関数の呼び出しのこの行でグローバル変数が定義される。
|
6
6
|
```
|
7
|
-
`
|
7
|
+
`extract.py`は変数:`filelistname`をモジュールレベルで定義していなく かつ `javascript_kindle.py`は`extract_last`の呼び出しを行っていないため、`global`(モジュールレベル)で変数定義できてないです。
|
8
8
|
|
9
9
|
◇対応案
|
10
10
|
案1,`extract_last`関数を呼び出してから変数を使用する。
|
11
|
-
案2,モジュールレベルで変数を定義
|
11
|
+
案2,モジュールレベルで変数を先に定義しておく。
|
12
|
-
※スクリプトのやりたいことがよく分かりませんが、`extract_last`関数の`return`で値を返すのはだめなのでしょうか?
|
13
12
|
|
13
|
+
**※スクリプトのやりたいことがよく分かりませんが、`extract_last`関数の`return`で値を返すのはだめなのでしょうか?**
|
14
|
+
|
14
15
|
案2の対応です。
|
16
|
+
`extract.py`側
|
15
17
|
```Python
|
16
18
|
filelistname = "" # PEP8に従うのなら、変数名は大文字で。
|
17
19
|
index = 0 #
|
18
20
|
def extract_last():
|
19
21
|
# 以下省略
|
20
22
|
```
|
23
|
+
`javascript_kindle.py`側
|
24
|
+
```Python
|
25
|
+
# 変数:indexにモジュール名(extract)が付いていないので追加
|
26
|
+
file_data = open('./codes/page' + str(i) + extract.filelistname[extract.index:], 'r')
|
27
|
+
```
|
21
28
|
◇参考情報
|
22
29
|
[global 文](https://docs.python.jp/3/reference/simple_stmts.html#global)
|
2
追記
answer
CHANGED
@@ -8,8 +8,8 @@
|
|
8
8
|
|
9
9
|
◇対応案
|
10
10
|
案1,`extract_last`関数を呼び出してから変数を使用する。
|
11
|
-
案2,
|
11
|
+
案2,モジュールレベルで変数を定義する。
|
12
|
-
※スクリプトのやりたいことがよく分かりませんが、関数のreturnで値を返すのはだめなのでしょうか?
|
12
|
+
※スクリプトのやりたいことがよく分かりませんが、`extract_last`関数の`return`で値を返すのはだめなのでしょうか?
|
13
13
|
|
14
14
|
案2の対応です。
|
15
15
|
```Python
|
1
追記
answer
CHANGED
@@ -1,9 +1,22 @@
|
|
1
|
+
```Python
|
1
|
-
|
2
|
+
def extract_last():
|
3
|
+
filelist = os.listdir("./codes")
|
2
|
-
global
|
4
|
+
global filelistname
|
5
|
+
filelistname = filelist[0] # extract_last関数の呼び出しのこの行でグローバル変数が定義される。
|
6
|
+
```
|
7
|
+
`javascript_kindle.py`は変数:`filelistname`をモジュールレベルで定義していなく かつ `extract_last`の呼び出しを行っていないため、`global`(モジュールレベル)で変数定義できてないです。
|
3
8
|
|
9
|
+
◇対応案
|
10
|
+
案1,`extract_last`関数を呼び出してから変数を使用する。
|
11
|
+
案2,グローバル変数を定義する。
|
12
|
+
※スクリプトのやりたいことがよく分かりませんが、関数のreturnで値を返すのはだめなのでしょうか?
|
13
|
+
|
14
|
+
案2の対応です。
|
4
15
|
```Python
|
5
|
-
filelistname = ""
|
16
|
+
filelistname = "" # PEP8に従うのなら、変数名は大文字で。
|
6
|
-
index = 0
|
17
|
+
index = 0 #
|
7
18
|
def extract_last():
|
8
19
|
# 以下省略
|
9
|
-
```
|
20
|
+
```
|
21
|
+
◇参考情報
|
22
|
+
[global 文](https://docs.python.jp/3/reference/simple_stmts.html#global)
|