回答編集履歴

1

追記

2017/11/09 13:09

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -3,3 +3,161 @@
3
3
 
4
4
 
5
5
  そもそもファイル自体が以前の行を消すことなく、増えて行くだけなら、最後にappendした行数を記録しておいて、読み込んだファイルの行数がそれ記録したものよりも大きくなった分を追加すればよいのでは?
6
+
7
+
8
+
9
+ ---
10
+
11
+ 以下追加
12
+
13
+ 次のようにもとのコードを解釈しています。
14
+
15
+ ```python
16
+
17
+ import time
18
+
19
+ A = []
20
+
21
+ B = []
22
+
23
+ C = []
24
+
25
+ D = []
26
+
27
+ E = []
28
+
29
+
30
+
31
+ while True:
32
+
33
+ with open('file.CSV',encoding='UTF-8') as f:
34
+
35
+ for file in f:
36
+
37
+ data = file.strip().split(',')
38
+
39
+ a = data[0]
40
+
41
+ b = data[1]
42
+
43
+ c = data[2]
44
+
45
+ d = data[3]
46
+
47
+ e = data[4]
48
+
49
+ if a not in A: #もし A のリストに a の値がなかったら追加する
50
+
51
+ A.append(a)
52
+
53
+ B.append(b)
54
+
55
+ C.append(c)
56
+
57
+ D.append(d)
58
+
59
+ E.append(e)
60
+
61
+ else: # A に値があれば追加しない
62
+
63
+ continue
64
+
65
+ print(A)
66
+
67
+ print(B)
68
+
69
+ print(C)
70
+
71
+ print(D)
72
+
73
+ print(E)
74
+
75
+ time.sleep(60) #60秒後に繰り返し
76
+
77
+ ```
78
+
79
+
80
+
81
+ >while文によって繰り返し処理され同じ値しか出ません
82
+
83
+ とあるので、if a not in Aが常に偽となり、elseの中身がいつも実行されていると解釈しました。
84
+
85
+ 正しいインデントだとそのようなことが起きるべきではない気がしますが、なぜか起きているのでそこを事実として受け止めることにしました。
86
+
87
+
88
+
89
+ 代わりにもっとシンプルの方法として、以下のものを提案しました。
90
+
91
+ こちらのほうがsplit()、代入等を一度だけで済ましていて、特にデータが蓄積してからの処理量を削減できます。
92
+
93
+ ただし、行数が単調に増加していくことを仮定しています。
94
+
95
+ 途中でfile.CSVがリセットされてまっさらの状態になってしまうことがあると、一部のデータを取りこぼします。
96
+
97
+
98
+
99
+ ```python
100
+
101
+ import time
102
+
103
+ A = []
104
+
105
+ B = []
106
+
107
+ C = []
108
+
109
+ D = []
110
+
111
+ E = []
112
+
113
+
114
+
115
+ current = 0
116
+
117
+ while True:
118
+
119
+ with open('file.CSV',encoding='UTF-8') as f:
120
+
121
+ content = f.readlines()
122
+
123
+ if len(content) > current:
124
+
125
+ for line in content[current:]:
126
+
127
+ data = line.strip().split(',')
128
+
129
+ a = data[0]
130
+
131
+ b = data[1]
132
+
133
+ c = data[2]
134
+
135
+ d = data[3]
136
+
137
+ e = data[4]
138
+
139
+ A.append(a)
140
+
141
+ B.append(b)
142
+
143
+ C.append(c)
144
+
145
+ D.append(d)
146
+
147
+ E.append(e)
148
+
149
+ current = len(content)
150
+
151
+ print(A)
152
+
153
+ print(B)
154
+
155
+ print(C)
156
+
157
+ print(D)
158
+
159
+ print(E)
160
+
161
+ time.sleep(60) #60秒後に繰り返し
162
+
163
+ ```