当前位置:  开发笔记 > 编程语言 > 正文

使np.loadtxt与多个可能的分隔符一起使用

如何解决《使np.loadtxt与多个可能的分隔符一起使用》经验,为你挑选了1个好方法。

我有一个程序读取数据文件,用户选择他们想要使用的列.我希望它对输入文件更加通用; 有时,列可能如下所示:

10:34:24.58  8.284  6.121

有时它们看起来像这样:

10 34 24.58  8.284  6.121

我希望程序在两种情况下将其识别为5列,而不是第一列为5列而第二列为3列.基本上,我希望它能够识别white space为分隔符和:分隔符.

有一个简单的方法吗?我知道numpy需要一个delimiter命令,但据我所知它只能使用一个.



1> hpaulj..:

np.loadtxt(和genfromtxt)接受任何可迭代项作为输入,只要它一次将其馈入一行即可。因此,文件中的行可以通过函数或生成器传递,该函数或生成器以各种方式对消息进行按摩。这是一个简单的例子

定义一对模拟文件的线:

In [7]: txt="""10:34:24.58  8.284  6.121
   ...: 10 34 24.58  8.284  6.121
   ...: """

In [8]: txt=txt.splitlines()

In [9]: txt
Out[9]: ['10:34:24.58  8.284  6.121', '10 34 24.58  8.284  6.121']

如果不是,:我可以直接传递给loadtxt

但是,让我们通过生成器传递这些行,该生成器用空格替换“:”。它可能是一个函数(带有yield)。在这里,我使用了一种新的生成器理解表达式:

In [10]: np.loadtxt((x.replace(b':',b' ') for x in txt))
Out[10]: 
array([[ 10.   ,  34.   ,  24.58 ,   8.284,   6.121],
       [ 10.   ,  34.   ,  24.58 ,   8.284,   6.121]])

对于文件,这应该可以工作(在打开的文件上反复返回行):

with open(filename) as f:
    A=np.loadtxt((x.replace(b':',b' ') for x in f))

regex对于更详尽的替换很有用。

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有