teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コード例追記

2020/07/25 15:52

投稿

Kaleidoscope
Kaleidoscope

スコア257

answer CHANGED
@@ -1,4 +1,50 @@
1
1
  for内の一時変数であるrow1,row2の値を保存していないのだからそうなります。
2
2
  グローバル変数に配列でも用意して保存すればよいのでは?
3
3
  また「変わっている」といっていますが、一回目の最後の出力"2"が2回目にも"2"と出力されているので「変わって」いませんよ。
4
- 抽出と言っていますが、ASKの抽出で、B.txtの4行目は拾われていませんが、それで問題ないんですかね?
4
+ 抽出と言っていますが、ASKの抽出で、B.txtの4行目は拾われていませんが、それで問題ないんですかね?
5
+
6
+ コード例追記(もっと簡潔に表す方法はあるかと思いますが)
7
+ ```python
8
+ import glob
9
+ report = glob.glob('*.txt')#複数のファイルを読み込む
10
+
11
+ #listALL =[] #ループ外で再利用する場合
12
+
13
+ ######ファイル毎にループ######
14
+ for m in report:
15
+ with open(m, encoding="utf-8") as fin:
16
+ start =-1 #ASKの位置
17
+ end =-1 #nestの位置
18
+ list=[] #結果出力用リスト
19
+
20
+ for row1, text1 in enumerate(fin, start=1):
21
+ text1 = text1.rstrip()
22
+ list.append(text1)
23
+
24
+ if "Ask" in text1:
25
+ if start=-1: #startが初期値の場合
26
+ start=row1-1 #startを更新
27
+ if "nest" in text1:
28
+ end=row1
29
+
30
+ #エラー処理
31
+ #ASK,nestが見つからないもしくはnestのあとにASKが来る場合
32
+ if (start == -1) or (end == -1) or (start > end):
33
+ print("error") #エラー出力してそのファイルは飛ばす。
34
+ continue
35
+
36
+ list=list[start:end]
37
+ print(list) #このへんで処理
38
+
39
+ #listAll.append(list) #ループ外で再利用する場合
40
+
41
+ #print(listAll) #ループ外で再利用する場合
42
+ ##このへんで処理
43
+
44
+ ##出力
45
+ #['Ask', 'test', 'test', 'nest'] #ループ1周目(A.txt)
46
+ #['Ask', 'test', 'Ask', 'nest'] #ループ2周目(B.txt)
47
+ #[['Ask', 'test', 'test', 'nest'], ['Ask', 'test', 'Ask', 'nest']] #listAllを出力した場合
48
+
49
+
50
+ ```