#質問
Pythonでcsv形式のデータファイルを読み込みuffファイルの作成を試みているのですが、実行時にエラーが発生し、原因があまり理解出来ておらず、修正方法が分からず困っています。また、今回用いたPythonコードはGit Hubのコードになります。Git Hub pyuff
#コード
申し訳ありませんが、コードをそのまま記載すると字数制限に引っかかってしまったので
リンクを貼らしていただきます。[uff.py]
(http://github.com/openmodal/pyuff/blob/master/pyuff.py)
コードの最初に次のように複素数データを格納するcsvファイルを作成しました。
Python
1def re(a,b): 2 c=a*math.cos(b*np.pi/180) 3 return c 4def im(x,y): 5 z=x*math.sin(y*np.pi/180) 6 return z 7v=[] 8Mypath='makeufftest_x.csv' 9with open(Mypath,encoding=("utf-8-sig")) as f: 10 reader=csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) 11 print(reader) 12 print(type(reader)) 13 for row in csv.reader(f): 14 magnitude=(float(row[0])) 15 phase=(float(row[1])) 16 v.append(complex(re(magnitude,phase),im(magnitude,phase))) 17with open ('uffcomplex.uff','w') as f: 18 writer=csv.writer(f,lineterminator='\n') 19 writer.writerow(v)
そして最後に上記のcsvファイルを読み込ませるという方針で考えています。
Python
1if __name__ == '__main__': 2 # uff_ascii = UFF('uffcomplex.csv') 3 # a = uff_ascii.read_sets(0) 4 # print(a) 5 # prepare_test_55('./data/test_uff55.uff') 6 # uff_ascii = UFF('./data/Artemis export - Geometry RPBC_setup_05_14102016_105117.uff') 7 uff_ascii = UFF('uffcomplex.csv') 8 a = uff_ascii.read_sets(0) 9 #uff_ascii = UFF('./data/no_spacing2_UFF58_ascii.uff') 10 uff_ascii = UFF('uffcomplex.csv') 11 a = uff_ascii.read_sets(2) 12 for _ in a.keys(): 13 if _ != 'data': 14 print(_, ':', a[_]) 15 #print(sum(a['data']))
自分で変更したコードはこの部分で後は特に変更しておりません。
#入力ファイル(一部)
makeufftest_x.csv 0.487436891 0 0.653218389 134.6398315 0.193872914 166.9507599 0.202087417 123.1289139 0.583534479 154.6550446 0.128547326 56.14105988 0.12943536 -154.5452881 0.3214885 177.0462799 0.029101485 138.5561066 0.192596287 -175.8987427 ...
uffcomplex.csv (0.487436891+0j) (-0.4589825144147272+0.4647895385970837j) (-0.18886641385687497+0.04377424470730506j) (-0.11044575285292425+0.16923669751706533j) (-0.5273675102770167+0.2497919079674562j) (0.07162016248094702+0.1067472123661926j) (-0.11687045992794481-0.05563099868382958j) (-0.32106139694892377+0.01656608044938813j) (-0.02181459622312576+0.019261874800424086j) (-0.19210308907627732-0.013774357826709462j) ...
この複素数データが801個あります。
#現状
Python
1Traceback (most recent call last): 2 3 File "C:path\pyuff.py", line 474, in _read_set 4 si = self._blockInd[n][0] # start offset 5 6IndexError: list index out of range 7 8 9During handling of the above exception, another exception occurred: 10 11Traceback (most recent call last): 12 13 File "C:path\pyuff.py", line 391, in read_sets 14 dset.append(self._read_set(ii)) 15 16 File "C:path\pyuff.py", line 483, in _read_set 17 raise UFFException('Error reading data-set #: ' + int(n)) 18 19TypeError: can only concatenate str (not "int") to str 20 21 22During handling of the above exception, another exception occurred: 23 24Traceback (most recent call last): 25 26 File "C:path\pyuff.py", line 1654, in <module> 27 a = uff_ascii.read_sets(0) 28 raise UFFException('Error when reading data-set(s)') 29 30UFFException: Error when reading data-set(s)
最後のif name == 'main':
の部分にcsvファイルを読み込ませるときにエラーが出てしまいます。
#試したこと
デバッグモードを用いて def read_sets内でエラーが発生していることを突き止めたが、対処方法が分からない。(例外処理?を行っているらしいが...)
Git Hub上の質問などを調べたが解決には至らず。
要求バージョンなどを確認
#要求バージョン
Python
1numpy>=1.12.0 2pytest>=3.0.5
#完成のイメージ
unvファイル
1 -1 2 18 3 1 0 0 1 1 4CS1 5 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 6 0.00000E+00 0.00000E+00 1.00000E+00 7 -1 8 -1 9 15 10 7 1 0 1 -5.16190E+01 5.16190E+01 5.00000E+01 11 6 1 0 1 -3.65000E+01 6.32200E+01 5.00000E+01 12 5 1 0 1 -1.88940E+01 7.05130E+01 5.00000E+01 13 4 1 0 1 5.09760E-15 8.32500E+01 5.00000E+01 14 3 1 0 1 1.88940E+01 7.05130E+01 5.00000E+01 15 2 1 0 1 3.65000E+01 6.32200E+01 5.00000E+01 16 1 1 0 1 5.16190E+01 5.16190E+01 5.00000E+01 17 24 1 0 1 6.32200E+01 3.65000E+01 5.00000E+01 18 23 1 0 1 7.05130E+01 1.88940E+01 5.00000E+01 19...
これはGit Hub上からお借りしているので、実際得られる値は違うものになりますが、見た目はこのような感じになると思っています。uffファイルイメージ
長いコードで申し訳ありませんが、誰かお力添えして頂ければ幸いです。
どうかよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー