 1 # ケース５
 2 
 3 from datetime import datetime, date
 4 import unicodedata
 5 
 6 def case5():
 7     print('=== Start case5 ===')
 8 
 9     line_num = 0
10     
11     #ファイルを開く
12     f1 = open('input_case5_1.data', 'r')
13     f2 = open('input_case5_2.data', 'r')
14     f3 = open('input_case5_3.data', 'r')
15 
16     while True:
17         # 各ファイルを１行読む
18         line_1 = f1.readline()
19         line_2 = f2.readline()
20         line_3 = f3.readline()
21 
22         # ファイルの終了確認
23         if line_1 == '' and line_2 == '' and line_3 == '':
24             print('比較終了')
25             break
26         if line_1 == '' or line_2 == '' or line_3 == '':
27             if line_1 == '':
28                 print('ファイル1は行数が少ないです')
29             if line_2 == '':
30                 print('ファイル2は行数が少ないです')
31             if line_3 == '':
32                 print('ファイル3は行数が少ないです')
33             break
34 
35         # 行数カウント
36         line_num += 1
37 
38         # 単語分割および正規化
39         l1 = unicodedata.normalize('NFKC', line_1)
40         l1_u = l1.upper()
41         w1 = l1_u.split()
42         w1_num = len(w1)
43 
44         l2 = unicodedata.normalize('NFKC', line_2)   ←この処理が長い
45         l2_u = l2.upper()
46         w2 = l2_u.split()
47         w2_num = len(w2)
48 
49         l3 = unicodedata.normalize('NFKC', line_3)
50         l3_u = l3.upper()
51         w3 = l3_u.split()
52         w3_num = len(w3)
53 
54         # 要素数比較
55         if w1_num != w2_num != w3_num:
56             print('要素数が異なります：', w1_num, w2_num, w3_num)
57             continue
58 
59         for i in range(w1_num):
60             e1 = w1[i]
61             e2 = w2[i]
62             e3 = w3[i]
63 
64             if e1 != e2 or e2 != e3:
65                 print(line_num, '行目：', i+1, '番目の単語が一致しません：', e1, e2, e3)
66                 break
67 
68     print('=== Finish case5 ===')
69 
70 # メイン
71 if __name__ == "__main__":
72     case5()
