Q&A
テキストファイルから座標を読み込むプログラムを作りました。このプログラムは以下のような仕事をします。
1.テキストファイルを読み込み、行を要素とするリストを作る
2.整形用の空白文字を取り除く
例)['','','1','','21','288']→['1','21','288']
3.strからfloat型に変換する。変換できなかったものはヘッダーと見なして削除する
以下、コードと対象のテキストファイルになります。テキストは長いので省略しています。
python
1def str2float(cities): 2 """ [[str,str],[str]] → [[float,float],[float]] """ 3 4 for i in range(len(cities)): 5 try: 6 for j in range(len(cities[i])): 7 cities[i][j] = float(cities[i][j]) 8 except: 9 print(f"I deleted {cities[0]}") 10 del cities[0] 11 continue 12 13 14def remove_blank(cities): 15 for i in range(len(cities)): 16 for j in range(len(cities[i])): 17 try: 18 cities[i].remove('') 19 except: 20 continue 21 if cities[-1] == ['EOF']: 22 del cities[-1] 23 24 25with open("ali535.tsp","r") as fin: 26 cities = [data.split(' ') for data in fin.read().splitlines()] 27 28 remove_blank(cities) 29 str2float(cities) 30 31 32print(cities,len(cities))
ali535.tsp(txt)
1NAME: ali535 2TYPE: TSP 3COMMENT: 535 Airports around the globe (Padberg/Rinaldi) 4DIMENSION: 535 5EDGE_WEIGHT_TYPE: GEO 6DISPLAY_DATA_TYPE: COORD_DISPLAY 7NODE_COORD_SECTION 81 36.49 7.49 92 57.06 9.51 103 30.22 48.14 114 5.15 -3.56 125 34.59 -106.37 13... 14... 15... 16532 -6.13 39.13 17533 47.28 8.33 18534 51.33 0.14 19535 24.58 91.53 20EOF
こちらのテキストはhttp://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/tsp/からダウンロードできます。
以下、実行結果になります。
I deleted ['NAME:', 'ali535'] I deleted ['TYPE:', 'TSP'] I deleted ['COMMENT:', '535', 'Airports', 'around', 'the', 'globe', '(Padberg/Rinaldi)'] I deleted ['DIMENSION:', '535'] I deleted ['EDGE_WEIGHT_TYPE:', 'GEO'] I deleted ['DISPLAY_DATA_TYPE:', 'COORD_DISPLAY'] I deleted ['NODE_COORD_SECTION'] I deleted ['1', '36.49', '7.49'] [[2.0, 57.06, 9.51], [3.0, 30.22, 48.14], [4.0, 5.15, -3.56], [5.0, 34.59, -106.37], [6.0, 57.12, -2.12], [7.0, 16.45, -99.45], [8.0, 5.36, -0.1], [9.0, 28.56, -13.36], ... ... ... [529.0, 44.06, 15.21], [530.0, 45.45, 16.04], [531.0, 41.4, -1.03], [532.0, -6.13, 39.13], [533.0, 47.28, 8.33], [534.0, 51.33, 0.14], [535.0, 24.58, 91.53]] 534
以上になります。解決方法などありましたら回答よろしくお願いします。
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/09/15 09:19
2022/09/15 18:05