teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コード修正

2020/03/07 14:23

投稿

8524ba23
8524ba23

スコア38352

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  以下のような感じで正規表現で`=~改行~改行改行`の単位で抽出していけばよいかと思います。
2
2
  ```Python
3
3
  import re
4
+ from io import StringIO
4
5
 
5
6
  # テストデータ
6
7
  s = """data (A) = 8.449E-19 -1.406E-04 -1.711E-04 8.832E-04 1.156E-03
@@ -17,15 +18,12 @@
17
18
  def to_list(s):
18
19
  return [float(e) for e in re.split(r'\s+', s.strip(' '))]
19
20
 
20
- ret = []
21
+ data = {}
21
- for m in re.finditer(r'=(.*?)\n(.*?)\n\n', datas, re.MULTILINE):
22
+ for m in re.finditer(r'data ((.*?)).*?=(.*?)\n(.*?)\n\n', datas, re.MULTILINE):
22
- line = to_list(m.group(1)) + to_list(m.group(2)) # 2行 -> 1行の数値リストに
23
+ line = to_list(m.group(2)) + to_list(m.group(3)) # 2行 -> 1行の数値リストに
23
- ret.append(line)
24
+ data[m.group(1)] = line
24
25
 
25
- # あとは好きに加工
26
- df = pd.DataFrame(ret)
27
- print(df)
26
+ print(data)
28
- # 0 1 2 3 4 5 6 7 8 9
29
- #0 8.449000e-19 -0.000141 -0.000171 0.000883 0.001156 0.001985 0.001051 0.000878 0.000516 0.000392
27
+ #{'A': [8.449e-19, -0.0001406, -0.0001711, 0.0008832, 0.001156, 0.001985, 0.001051, 0.0008782, 0.0005164, 0.0003921], 'B'
30
- #1 -9.936000e-06 -0.000150 -0.000171 0.000898 0.001274 0.002044 0.001040 0.000851 0.000470 0.000370
28
+ #: [-9.936e-06, -0.0001504, -0.0001712, 0.000898, 0.001274, 0.002044, 0.00104, 0.0008514, 0.0004703, 0.00037]}
31
29
  ```