首页 > 解决方案 > 在python中将数据提取到矩阵或numpy数组中的有效方法

问题描述

我想从 txt 文件中提取数据,同时使用 python 删除文件中存在的文本。

我有一个文件,说 ABC.txt 如下:

步骤 = 1

22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
STEP = 2

22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
STEP = 3

22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000
22.530183726628522 0.0000000000000000

忽略 'STEP = ' 和以下空间,我想将所有数字数据存储到一个 numpy 数组中。

我尝试了以下有效的脚本:

import numpy as np

with open("ABC.txt", "r") as f:
    lines = f.readlines()
    

data =np.zeros([24,2])

kk=0

for ii in range(3):         
  
    for jj in range(10*ii+2, 10*ii+9+1):
    
        data[kk,:] = np.fromstring(lines[jj], dtype=float, sep=' ')
        kk=kk+1

有没有更直接的方法来做这个操作?

标签: pythonnumpy

解决方案


或者,如果您无权访问外部库但仍想执行此任务。您可以执行以下操作:

with open("ABC.txt", "r") as f:
    lines = f.readlines()

arr = list()

for line in lines:
    if line[0].isdecimal(): # for every line see if it begins with a decimal number
        arr.append(line.split())

以上也可以通过列表推导来完成,如下所示,两者都会给出相同的结果:

arr1 = [line.split() for line in lines if line[0].isdecimal()]

推荐阅读