python 提取数据列并将它们并排放置
python extract data columns and put them side by side
早上好,我是新 python 用户,我对 MATLAB 有一些经验。为了练习,我想编写一个脚本,该脚本也可以在我的工作中对我有所帮助。我有一个大文件,我想提取一些列并并排放置(这些列的长度都相同)。
所以,我从这样的情况开始
:
Great amount of text and numbers
1 2 3 4 5
O O O O O
SpecialText -- text text text text text
1 1 A 1A col1 col2 col3 col4 col5
2 2A col1 col2 col3 col4 col5
3 2BX col1 col2 col3 col4 col5
4 2BY col1 col2 col3 col4 col5
5 2BZ col1 col2 col3 col4 col5
6 2 B 3A col1 col2 col3 col4 col5
7 3AX col1 col2 col3 col4 col5
8 3AY col1 col2 col3 col4 col5
6 7 8 9 10
O O O O O
SpecialText -- text text text text text
1 1 A 1A col6 col7 col8 col9 col10
2 2A col6 col7 col8 col9 col10
3 2BX col6 col7 col8 col9 col10
4 2BY col6 col7 col8 col9 col10
5 2BZ col6 col7 col8 col9 col10
6 2 B 3A col6 col7 col8 col9 col10
7 3AX col6 col7 col8 col9 col10
8 3AY col6 col7 col8 col9 col10
我想获得类似的东西:
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
... ... ... ... ... ... ... ...
我的问题很简单。这对初学者可行吗?我可以使用任何库来简化这项工作吗?
抱歉,我的经验不足,在此先感谢您。
编辑:起始文件是 .txt 文件
EDIT2:为清楚起见修改了起始文件
请使用以下程序
import re
result={}
with open("input.txt","r") as f:
insidedatablock=False
line=f.readline()
while line!='':
if line.strip().startswith("SpecialText"):
insidedatablock=True
if line.strip()=='':
insidedatablock=False
if insidedatablock==True:
cols=re.split("\s+",line.strip())
if cols[0].isdigit() and len(cols)>=7:
if cols[0] in result:
result[cols[0]]+=cols[-5:]
else:
result[cols[0]]=cols[-5:]
line=f.readline()
for i in result:
print(" ".join(result[i]))
下面使用给定的 txt 文件打印。
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
早上好,我是新 python 用户,我对 MATLAB 有一些经验。为了练习,我想编写一个脚本,该脚本也可以在我的工作中对我有所帮助。我有一个大文件,我想提取一些列并并排放置(这些列的长度都相同)。 所以,我从这样的情况开始 :
Great amount of text and numbers
1 2 3 4 5
O O O O O
SpecialText -- text text text text text
1 1 A 1A col1 col2 col3 col4 col5
2 2A col1 col2 col3 col4 col5
3 2BX col1 col2 col3 col4 col5
4 2BY col1 col2 col3 col4 col5
5 2BZ col1 col2 col3 col4 col5
6 2 B 3A col1 col2 col3 col4 col5
7 3AX col1 col2 col3 col4 col5
8 3AY col1 col2 col3 col4 col5
6 7 8 9 10
O O O O O
SpecialText -- text text text text text
1 1 A 1A col6 col7 col8 col9 col10
2 2A col6 col7 col8 col9 col10
3 2BX col6 col7 col8 col9 col10
4 2BY col6 col7 col8 col9 col10
5 2BZ col6 col7 col8 col9 col10
6 2 B 3A col6 col7 col8 col9 col10
7 3AX col6 col7 col8 col9 col10
8 3AY col6 col7 col8 col9 col10
我想获得类似的东西:
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
col1 col2 col3 col4 col5 col6 col7 ...
... ... ... ... ... ... ... ...
我的问题很简单。这对初学者可行吗?我可以使用任何库来简化这项工作吗? 抱歉,我的经验不足,在此先感谢您。
编辑:起始文件是 .txt 文件
EDIT2:为清楚起见修改了起始文件
请使用以下程序
import re
result={}
with open("input.txt","r") as f:
insidedatablock=False
line=f.readline()
while line!='':
if line.strip().startswith("SpecialText"):
insidedatablock=True
if line.strip()=='':
insidedatablock=False
if insidedatablock==True:
cols=re.split("\s+",line.strip())
if cols[0].isdigit() and len(cols)>=7:
if cols[0] in result:
result[cols[0]]+=cols[-5:]
else:
result[cols[0]]=cols[-5:]
line=f.readline()
for i in result:
print(" ".join(result[i]))
下面使用给定的 txt 文件打印。
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10
col1 col2 col3 col4 col5 col6 col7 col8 col9 col10