python - 提取字符串和第二个空行之间的数字:BASH 和 python
问题描述
问题类似于之前关于 SO 的许多问题。但似乎足够清晰。
我有具有以下输出的数据文件。数字将被提取。数字块中元素的数量是随机的,并且在数字块的上下各有一个空行。目的是提取数字并可能将它们分配给 python numpy 数组。
string 1
234034 6361234 45096 12342134 2878814 456456
125294 7341234 17234 23135 768234 54134123
213203 6.25 2.36 1.0 0.0021
string 2
298034 20481234 45096 12502134 2870814 456456
19875294 441284 98234 27897135 251021524 768234 54134123
2.3261
string 3
744034 6644034 75096 5302134 298978814 456456
6767294 70441234 330234 200135 867234 54004123
204203 22015 120158 125 21 625 11 5 2.021
预期输出:排列为 bash 数组或 numpy(python) 数组的所有块的 数字。下面显示的数值仅具有代表性。
- Bash 数组:'744034'、'6644034'、'75096'、.. .. '21'、'625'、'11'、'5'、'2.021'
或者
numpy 数组:[744034,6644034,75....,625,11,5,2.021]
不过,我的用例更喜欢 numpy 数组。
从上一个问题中得到提示,尝试了这个,sed -n '/^symmetry 1$/,/^symmetry 2$/p' file
但输出为 null 可能是由于开始和结束搜索词中的空格。
尝试了 python,因为最终我需要将数字作为 np 数组。从评论中的问题和帮助中,我使用以下代码得到一个块
import sys
import re
F=open(sys.argv[1])
text=F.read()
reg=re.compile(r'string 1(.*?)string 2',re.DOTALL)
for match in reg.finditer(text):
print (match.groups())
输出,
string 1
744034 6644034 75096 5302134 298978814 456456
6767294 70441234 330234 200135 867234 54004123
204203 22015 120158 125 21 625 11 5 2.021
string 2
需要建议。
解决方案
如果我理解得很好,这可能会有所帮助:
>>> [np.array(block.split()).astype(float) # good blocks get parsed into np arrays
for block in file_content.split("\n\n") # split by empty lines
if not block[0].isalpha()] # avoid string lines
[array([2.3403400e+05, 6.3612340e+06, 4.5096000e+04, 1.2342134e+07,
2.8788140e+06, 4.5645600e+05, 1.2529400e+05, 7.3412340e+06,
1.7234000e+04, 2.3135000e+04, 7.6823400e+05, 5.4134123e+07,
2.1320300e+05, 6.2500000e+00, 2.3600000e+00, 1.0000000e+00,
2.1000000e-03]),
array([2.98034000e+05, 2.04812340e+07, 4.50960000e+04, 1.25021340e+07,
2.87081400e+06, 4.56456000e+05, 1.98752940e+07, 4.41284000e+05,
9.82340000e+04, 2.78971350e+07, 2.51021524e+08, 7.68234000e+05,
5.41341230e+07, 2.32610000e+00]),
array([7.44034000e+05, 6.64403400e+06, 7.50960000e+04, 5.30213400e+06,
2.98978814e+08, 4.56456000e+05, 6.76729400e+06, 7.04412340e+07,
3.30234000e+05, 2.00135000e+05, 8.67234000e+05, 5.40041230e+07,
2.04203000e+05, 2.20150000e+04, 1.20158000e+05, 1.25000000e+02,
2.10000000e+01, 6.25000000e+02, 1.10000000e+01, 5.00000000e+00,
2.02100000e+00])]
推荐阅读
- c# - 关于 c# 和 unity 中的实例方法
- javascript - 反应本机以构建 ios 应用程序时的 PhaseScriptExecution 错误
- java - 具有唯一值的多图
- ruby-on-rails - Ruby on rails xhr.send( ( options.hasContent && options.data ) || null );
- python - 难以使用 SymPy 重新排列公式
- python - 如何将两个或多个相关但不同的特征组合成一个特征并为该特征分配新值
- c++ - 使用 pthreads 创建线程安全队列是否正确?
- google-sheets - 如何使用谷歌驱动器推送通知 API?
- azure-functions - 将 HttpRequest 转换为 HttpRequestData 天蓝色函数
- python - 大熊猫获得平均间隔