在Python中将数据文件列拆分为单独的数组

2024-04-19 02:02:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,整天都在想这个问题。我有一个数据文件如下所示

time    I(R_stkb)

Step Information: Temp=0  (Run: 1/11)

0.000000000000000e+000  0.000000e+000

9.999999960041972e-012  8.924141e-012

1.999999992008394e-011  9.623148e-012

3.999999984016789e-011  6.154220e-012

(注意:每个数据行之间没有空行。)

我想使用matplotlib函数来绘制数据,所以我需要数组中的两个独立列。

我现在有

def plotdata():

Xvals=[], Yvals=[]
i = open(file,'r')

for line in i:
    Xvals,Yvals = line.split(' ', 1)

print Xvals,Yvals

但显然这是完全错误的。有人能给我一个简单的答案吗?解释一下这几行字的确切含义会有帮助的。干杯。

编辑:前两行在整个文件中重复。


Tags: 数据函数runinformationtimematplotlib数据文件step
3条回答

这就是^{}的设计目的。尝试:

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt(file, skiprows = 2) # assuming you have time and step information on 2 separate lines 
                                      # and you do not want to read them
plt.plot(data[:,0], data[:,1])
plt.show()

编辑: 如果您有散布在文件中的时间和步骤信息,并且希望在每个步骤上绘制数据,则有可能将所有文件读取到内存中(假设它足够小),然后将其拆分为time字符串:

l = open(fname, 'rb').read()
for chunk in l.split('time'):
    data = np.array([s.split() for s in chunk.split('\n')[2:]][:-1], dtype = np.float)
    plt.plot(data[:,0], data[:,1])
    plt.show()

或者您可以将#注释符号添加到注释行并使用np.loadxt

一种方法是:

Xvals=[]; Yvals=[]
i = open(file,'r')

for line in i:
    x, y = line.split(' ', 1)
    Xvals.append(float(x))
    Yvals.append(float(y))

print Xvals,Yvals

注意对float函数的调用,它将把从文件中获取的字符串更改为数字。

这是zip方法上的*运算符的作业。

>>> asdf
[[1, 2], [3, 4], [5, 6]]


>>> zip(*asdf)
[(1, 3, 5), (2, 4, 6)]

因此,在您的数据上下文中,它可能类似于:

handle = open(file,'r')
lines = [line.split() for line in handle if line[:4] not in ('time', 'Step')]
Xvals, Yvals = zip(*lines)

或者,如果您真的需要能够在之后对数据进行变异,您可以在每个元组上调用list构造函数:

Xvals, Yvals = [list(block) for block in zip(*lines)]

相关问题 更多 >