回答編集履歴
4
追記
test
CHANGED
@@ -22,35 +22,35 @@
|
|
22
22
|
|
23
23
|
def renumber(IDs, data):
|
24
24
|
|
25
|
-
for k in IDs:
|
25
|
+
for k in IDs: # IDsからkey(登録済みID)を一つずつ呼び出し
|
26
26
|
|
27
|
-
diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])]
|
27
|
+
diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])] # 登録済みのID内容と、判定対象のID内容の各数値の差分の絶対値をとってリストに格納
|
28
28
|
|
29
|
-
if max(diff) <= 5:
|
29
|
+
if max(diff) <= 5: # 差分の最大値が5以内であれば
|
30
30
|
|
31
|
-
return [k] + data[1:]
|
31
|
+
return [k] + data[1:] # ID名を登録済みの番号に変えて値を返す
|
32
32
|
|
33
|
-
return data
|
33
|
+
return data # 登録済みIDと重複がないと判定されたら、何も変更せずに返す
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
IDs = dict()
|
37
|
+
IDs = dict() # 今までに出てきたIDをkey, それに付随する数値をvalueにして格納するため
|
38
38
|
|
39
39
|
with open('out.csv', 'r', encoding='UTF-8') as f:
|
40
40
|
|
41
|
-
reader = csv.reader(f)
|
41
|
+
reader = csv.reader(f) # 読み込み用のインスタンス生成
|
42
42
|
|
43
43
|
with open('inp.txt','w', encoding='UTF-8', newline="") as i:
|
44
44
|
|
45
|
-
writer = csv.writer(i)
|
45
|
+
writer = csv.writer(i) # 書き込み用のインスタンス生成
|
46
46
|
|
47
|
-
for data in reader:
|
47
|
+
for data in reader: # 一行ずつ読み込み(csvなので、カンマで区切られたリスト型)
|
48
48
|
|
49
|
-
if "ID:" in data[0]:
|
49
|
+
if "ID:" in data[0]: # 一要素目がID番号なら
|
50
50
|
|
51
|
-
data = renumber(IDs, data)
|
51
|
+
data = renumber(IDs, data) # renumber関数で±5以内の重複判定
|
52
52
|
|
53
|
-
IDs[data[0]] = data[2:]
|
53
|
+
IDs[data[0]] = data[2:] # IDsに登録(同じIDがあれば上書きしてしまうので、もしかしたら要件と違う挙動かもしれない)
|
54
54
|
|
55
55
|
writer.writerow(data)
|
56
56
|
|
3
修正
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
※修正しました
|
10
10
|
|
11
|
-
renumber
|
11
|
+
renumberが「どれか一つでも差が5以内なら同ID」という処理になっていました。
|
12
12
|
|
13
13
|
diffというリストに差分を格納して、最大が5を超えていないか確認するよう修正したことで「どれか一つでも差が5以上なら異ID」になっていると思います。
|
14
14
|
|
2
コード修正
test
CHANGED
@@ -5,6 +5,12 @@
|
|
5
5
|
IDsリストに最初に出てきたID内容を保存して、renumber関数で保存内容と比較して必要なら書き換えてます。
|
6
6
|
|
7
7
|
|
8
|
+
|
9
|
+
※修正しました
|
10
|
+
|
11
|
+
renumberの中のif文が、continueになっていましたが、これだと「どれか一つでも差が5以内なら同ID」という処理でした。
|
12
|
+
|
13
|
+
diffというリストに差分を格納して、最大が5を超えていないか確認するよう修正したことで「どれか一つでも差が5以上なら異ID」になっていると思います。
|
8
14
|
|
9
15
|
```python3
|
10
16
|
|
@@ -18,11 +24,9 @@
|
|
18
24
|
|
19
25
|
for k in IDs:
|
20
26
|
|
21
|
-
for v, d in zip(IDs[k], data[2:])
|
27
|
+
diff = [abs(int(v)-int(d)) for v, d in zip(IDs[k], data[2:])]
|
22
28
|
|
23
|
-
|
29
|
+
if max(diff) <= 5:
|
24
|
-
|
25
|
-
continue
|
26
30
|
|
27
31
|
return [k] + data[1:]
|
28
32
|
|
@@ -50,46 +54,4 @@
|
|
50
54
|
|
51
55
|
writer.writerow(data)
|
52
56
|
|
53
|
-
|
54
|
-
|
55
|
-
# inp.txt
|
56
|
-
|
57
|
-
# Frame #: 1,,,,,
|
58
|
-
|
59
|
-
# Frame_time:0.03,,,,,
|
60
|
-
|
61
|
-
# Frame #: 2,,,,,
|
62
|
-
|
63
|
-
# Frame_time:0.07,,,,,
|
64
|
-
|
65
|
-
# Frame #: 3,,,,,
|
66
|
-
|
67
|
-
# ID:1,KPHN,866,800,965,850
|
68
|
-
|
69
|
-
# ID:2,KPHN,796,850,851,904
|
70
|
-
|
71
|
-
# Frame_time:0.10,,,,,
|
72
|
-
|
73
|
-
# Frame #: 4,,,,,
|
74
|
-
|
75
|
-
# ID:1,KPHN,866,800,967,851
|
76
|
-
|
77
|
-
# ID:2,KPHN,796,852,851,906
|
78
|
-
|
79
|
-
# Frame_time:0.13,,,,,
|
80
|
-
|
81
|
-
# Frame #: 5,,,,,
|
82
|
-
|
83
|
-
# ID:1,KPHN,873,799,976,851
|
84
|
-
|
85
|
-
# ID:2,KPHN,796,852,853,909
|
86
|
-
|
87
|
-
# Frame_time:0.17,,,,,
|
88
|
-
|
89
|
-
# Frame #: 6,,,,,
|
90
|
-
|
91
|
-
# ID:1,KPHN,875,799,979,853
|
92
|
-
|
93
|
-
# ID:2,KPHN,796,853,855,911
|
94
|
-
|
95
57
|
```
|
1
修正
test
CHANGED
@@ -48,8 +48,6 @@
|
|
48
48
|
|
49
49
|
IDs[data[0]] = data[2:]
|
50
50
|
|
51
|
-
print(data)
|
52
|
-
|
53
51
|
writer.writerow(data)
|
54
52
|
|
55
53
|
|