前提・実現したいこと
1、xmlfileを開いて内容を文字型行列に代入しようとしました。
1つの文字列は最大で13文字です。読み込んだxmlfileをパースする段階では13文字は正常に表示されます。しかしこれを文字型配列に代入後printすると
11文字しか表示されません。文字配列の定義に定数のint配列からstr配列に
変換しているので(numpyで文字配列が定義できるとのことですたので、調べましたが理解できず現在のコードで間に合わせています)変換の仕方がまずいのかと思っています。配列への代入の仕方も垢ぬけない感じです。
2、xmlファイルでブランク('')の箇所をパースすると'None'と取り込まれるので'None'の時はブランク('')にして代入しましたがプリントすると'None'がprintされます。調べて限りでは改行されるとなっていました。原因が判りません。
xmlfilefileをパースしている過程でプリントした内容
[['num', '1'],
['ns', 'AKT53'],
['nh', 'K82'],
['nd', 'QT3'],
['nc', 'Q6'],
['es', 'QJ7'],
['eh', 'T64'],
['ed', '976'],
['ec', 'J942'],
['ss', '98'],
['sh', 'AJ93'],
['sd', 'A85'],
['sc', 'T875'],
['ws', '642'],
['wh', 'Q75'],
['wd', 'KJ42'],
['wc', 'AK3'],
['vul', 'NONE'],
['deal', 'N'],
['num', '2'],
['ns', '87'],
['nh', '64'],
['nd', 'T52'],
['nc', 'AQ6532'],
['es', 'QT965'],
['eh', 'AT8'],
['ed', 'J64'],
['ec', '87'],
['ss', '4'],
['sh', 'J953'],
['sd', 'K9873'],
['sc', 'J94'],
['ws', 'AKJ32'],
['wh', 'KQ72'],
['wd', 'AQ'],
['wc', 'KT'],
['vul', 'NS'],
['deal', 'E'],
['num', '3'],
['ns', 'AKQJT98765432'], #これを配列に代入した箇所をプリント
['nh', None],
['nd', None],
['nc', None],
['es', None],
['eh', 'AKQJT98765432'],
['ed', None],
['ec', None],
['ss', None],
['sh', None],
['sd', 'AKQJT98765432'],
['sc', None],
['ws', None],
['wh', None],
['wd', None],
['wc', 'AKQJT98765432'],
['vul', 'NONE'],
['deal', 'W']]
#配列に代入後プリントした内容
AKQJT98765432 パースしたデータを表示、xmlファイルの内容が正しく表示されている
AKQJT987654 上記データ代入した配列を表示ん'32’が抜けている
None ブランクを代入したが'None'と表示される
エラーメッセージ:無し
該当のソースコード
python
1import tkinter as tk 2import tkinter.filedialog as fd 3import xml.etree.ElementTree as ET 4import numpy as np 5 6global boardData 7global pd 8global exec 9 10InitData = np.full((65,18),1) 11boardData = InitData.astype(str) 12#xmlファイルの内容読込可孫タグ名、孫タグ内容表示可、 13#孫タグと内容はboard[n] n:0~Max孫ファイルの行 14def openFile(): 15 xfpath = fd.askopenfilename() 16 17 if xfpath: 18 global exec 19 global boardData 20 print(xfpath) 21 with open(xfpath, encoding='utf-8') as fin: 22 root = ET.fromstring(fin.read()) 23 24 board = [[e.tag, e.text] for e in root.findall('board/*')] 25 from pprint import pprint 26 pprint(board) 27 28 listNum = 0 29 exec = 0 30 while listNum <= len(board) - 1: #boardの最終行まで 31 if board[listNum][0] == 'num': 32 if board[listNum][1] == '': 33 listNum = 1300 #64boardでもWhileループ抜ける値 34 boardNum = int(board[listNum][1]) 35 exec = 1 36 37 elif board[listNum][0] == 'ns': 38 if board[listNum][1] == 'None': 39 boardData[boardNum][0] = '' 40 else: 41 boardData[boardNum][0] = board[listNum][1] 42 exec = 1 43 44 elif board[listNum][0] == 'nh': 45 if board[listNum][1] == 'None': 46 boardData[boardNum][1] = '' 47 else: 48 boardData[boardNum][1] = board[listNum][1] 49 exec = 1 50 51 elif board[listNum][0] == 'nd': 52 if board[listNum][1] == 'None': 53 boardData[boardNum][2] = '' 54 else: 55 boardData[boardNum][2] = board[listNum][1] 56 exec = 1 57 58 elif board[listNum][0] == 'nc': 59 if board[listNum][1] == 'None': 60 boardData[boardNum][3] = '' 61 else: 62 boardData[boardNum][3] = board[listNum][1] 63 exec = 1 64 65 elif board[listNum][0] == 'es': 66 if board[listNum][1] == 'None': 67 boardData[boardNum][4] = '' 68 else: 69 boardData[boardNum][4] = board[listNum][1] 70 exec = 1 71 72 elif board[listNum][0] == 'eh': 73 if board[listNum][1] == 'None': 74 boardData[boardNum][5] = '' 75 else: 76 boardData[boardNum][5] = board[listNum][1] 77 exec = 1 78 79 elif board[listNum][0] == 'ed': 80 if board[listNum][1] == 'None': 81 boardData[boardNum][6] = '' 82 else: 83 boardData[boardNum][6] = board[listNum][1] 84 exec = 1 85 86 elif board[listNum][0] == 'ec': 87 if board[listNum][1] == 'None': 88 boardData[boardNum][7] = '' 89 else: 90 boardData[boardNum][7] = board[listNum][1] 91 exec = 1 92 93 elif board[listNum][0] == 'ss': 94 if board[listNum][1] == 'None': 95 boardData[boardNum][8] = '' 96 else: 97 boardData[boardNum][8] = board[listNum][1] 98 exec = 1 99 100 elif board[listNum][0] == 'sh': 101 if board[listNum][1] == 'None': 102 boardData[boardNum][9] = '' 103 else: 104 boardData[boardNum][9] = board[listNum][1] 105 exec = 1 106 107 elif board[listNum][0] == 'sd': 108 if board[listNum][1] == 'None': 109 boardData[boardNum][10] = '' 110 else: 111 boardData[boardNum][10] = board[listNum][1] 112 exec = 1 113 114 elif board[listNum][0] == 'sc': 115 if board[listNum][1] == 'None': 116 boardData[boardNum][11] = '' 117 else: 118 boardData[boardNum][11] = board[listNum][1] 119 exec = 1 120 121 elif board[listNum][0] == 'ws': 122 if board[listNum][1] == 'None': 123 boardData[boardNum][12] = '' 124 else: 125 boardData[boardNum][12] = board[listNum][1] 126 exec = 1 127 128 elif board[listNum][0] == 'wh': 129 if board[listNum][1] == 'None': 130 boardData[boardNum][13] = '' 131 else: 132 boardData[boardNum][13] = board[listNum][1] 133 exec = 1 134 135 elif board[listNum][0] == 'wd': 136 if board[listNum][1] == 'None': 137 boardData[boardNum][14] = '' 138 else: 139 boardData[boardNum][14] = board[listNum][1] 140 exec = 1 141 142 elif board[listNum][0] == 'wc': 143 if board[listNum][1] == 'None': 144 boardData[boardNum][15] = '' 145 else: 146 boardData[boardNum][15] = board[listNum][1] 147 exec = 1 148 149 elif board[listNum][0] == 'vul': 150 boardData[boardNum][16] = board[listNum][1] 151 exec = 1 152 153 elif board[listNum][0] == 'deal': 154 boardData[boardNum][17] = board[listNum][1] 155 exec = 1 156 157 elif exec == 0: 158 print('エラ-') 159 boardNum = 0 160 listNum += 1 161 print(board[39][1]) #boardData[3][0]代入した元のパースした内容をprint→ 162 print(boardData[3][0]) #13文字が入っている場所をprint 163 print(board[40][1]) #ブランクを代入した箇所をprint 164 165 166root = tk.Tk() 167root.geometry("400x350") 168btn = tk.Button(text="ファイルを開く", command = openFile) 169btn.pack() 170tk.mainloop()
試したこと
boardData = InitData.astype(str)についてnetで調べましたが情報が得られず打つ手がない状態です。
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/12 04:44
2021/11/12 04:47
2021/11/15 05:49
2021/11/15 06:19