如何使用loadtxt的每一行文件?

时间:2014-03-18 15:40:25

标签: python

好的,我有一个包含13列的长文件,我想要使用的是:粒子速度x分量,vely分量和vel z。我想将速度的每个分量(对于文件中的每一行,即每个粒子)放入一个数组,然后计算模数。但是,我无法做到这一点。它给了我一个[[x1,x2,x3,......],[y1,y2,y3 ...],[z1,z2 ....]]的数组,然后使用它的模数。我得到的是

import numpy as np 

v_x = np.loadtxt('data.txt',usecols=(1,))
v_y = np.loadtxt('data.txt',usecols=(2,))
v_z = np.loadtxt('data.txt',usecols=(3,))

vel = np.array([v_x,v_y,v_z])
mod_vel = np.linalg.norm(vel)

print vel, mod_vel

我尝试过做

f = open('data.txt')
for line in f:
    stuff

但这也不起作用。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

我假设您的txt文件是一种(标签分隔):

  

1 2 3

     

4 5 6

     

7 8 9

代码:

with open("test.txt") as f:
    t = f.readlines()
splitted = [l[:-1].split("\t") for l in t]
v_x = [l[0] for l in splitted]
v_y = [l[1] for l in splitted]
v_z = [l[2] for l in splitted]

答案 1 :(得分:0)

不确定这是否是您正在寻找的,但我会选择重新调整。我倾向于在通过loadtxt读取数据时尝试使用它们,只是为了清洁。

import numpy as np

data = np.loadtxt(
        'data.txt',
        usecols=(1,2,3),
        delimiter=',',
        dtype=[
            ('vx', 'f8'),
            ('vy', 'f8'),
            ('vz', 'f8')
            ]
        )

norm = np.linalg.norm([data['vx'], data['vy'], data['vz']])