【发布时间】:2020-07-12 00:56:15
【问题描述】:
问题类似于之前关于 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
预期输出: all 块中的数字排列为 bash 数组或 numpy(python) 数组。 下面显示的数值仅具有代表性。
- Bash 数组:'744034','6644034','75096', .. .. '21','625','11','5','2.021'
或
-
Numpy 数组:[744034,6644034,75....,625,11,5,2.021]
不过,我的用例更喜欢 numpy 数组。
从以前的question 中得到启发,尝试了这个sed -n '/^symmetry 1$/,/^symmetry 2$/p' file
但输出为 null 可能是由于开始和结束搜索词中的空格。
尝试过 python,因为最终我需要将数字作为 np 数组。从question 和 cmets 的帮助中,我使用以下代码得到一个块
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
需要建议。
【问题讨论】:
-
print match.groups()[0]=>print(match.group()),正则表达式必须是r'xxx(.*?)yyy' -
谢谢,我现在可以得到一个块。
-
你想要一个数组中的所有数字吗?
-
@UnbearableLightness : 单独的数组更好。
标签: python python-3.x bash awk sed