前提・実現したいこと
やりたいこと:Python3.xで数値とテキスト混合のデータ(.datファイル)を読み込むプログラムを作成しています.
最終的な目的:格納した配列からグラフを作成したり,数値計算をする.
→まず,生データを整理したい.
■ データの中身
このデータはある計測装置から直接吐き出されるもので,
ダブ区切りでもカンマ区切りでもなく,独自のフォーマットです.
data (A) = 8.449E-19 -1.406E-04 -1.711E-04 8.832E-04 1.156E-03
(スペース連続) 1.985E-03 1.051E-03 8.782E-04 5.164E-04 3.921E-04
(改行)
data (B) = -9.936E-06 -1.504E-04 -1.712E-04 8.980E-04 1.274E-03
(スペース連続) 2.044E-03 1.040E-03 8.514E-04 4.703E-04 3.700E-04
(改行)
...と以下続く.----------------------------------------------------------------
※数字が5つ続いたら,改行して,先頭を揃えてまた5つ数字がならぶ.'-'符合分はずれる
※.DATファイルはテキストです.
■ 実現したいこと
STEP1:DATA.DATを読み込む.先頭から1行ずつ読んでいく.
STEP2: data (A) = という名前がきたらdata_A 名前の空配列を作成し,8.449E-19 ~ 3.921E-04まで(上の事例では2行分)格納
STEP3: dataB以降も同様.ループで最後(データがないところ)まで続ける.
該当のソースコード
python
1 2import re 3import pandas as pd 4 5pattern=re.compile(' +') # 正規表現でスペースが1個以上続くものを抽出 6ifile = 'DATA.DAT' # 本文のようなデータ 7fout = open('c'+ifile.split('.')[0]+'.csv','tw') # 出力ファイル名を入力ファイルから命名してopen 8 9with open(ifile,'tr') as fin: 10 for iline in fin: 11 fout.write(pattern.sub(',',iline)) #一文字以上のスペースをカンマに置換→ここのループで処理したい 12 13fout.close() 14 15 16Dummy_names = [ 'c{0:02d}'.format(i) for i in range(10) ] #疑似的なヘッダー 17df = pd.read_table('cDATA.csv','r',names=Dummy_names, delimiter = ",") #今はとりあえずDataFrameで中身を見ている 18
試したこと
1.pandas でDateFrameとして読み込み.
→1つの1つの要素に1行分すべてはいってしまう.
例:「data (A) = 8.449E-19 -1.406E-04 -1.711E-04 8.832E-04 1.156E-03」ここまで1要素にはいってしまう.
2.スペース区切りとも言えない感じなので,with openでパスを指定し,一度,CSVに変換する.スペースを','に置きかえ(記載ソース)
↓結果
,Y,IN(I),=,8.449E-19,-1.406E-04,-1.711E-04,8.832E-04,1.156E-03
,1.985E-03,1.051E-03,8.782E-04,5.164E-04,3.921E-04
→これをPandasのread_csvで読む
1要素ずつデータは格納されたが,さらに後処理するの
ここからまとめるのもいいが,
初期のforループで配列格納を逐次行いたい
補足情報(FW/ツールのバージョンなど)
Spyderで作業しています.
回答1件
あなたの回答
tips
プレビュー