将结构化数据导入python

时间:2016-07-28 17:34:37

标签: python arrays numpy import

我有一个包含一组数组的文本文件,如下所示:

[(0,1,3),(0,4,5),...(1,9,0)]

[(9,8,7),(0,4,5),...(1,9,0)]

其中行的长度不同。

这实际上是路径列表,其中每组点都是路径,即:

(0,1,3),(0,4,5),...(1,9,0) =path1

(9,8,7),(0,4,5),...(1,9,0) =path2

我需要以可以调用所有元素的形式导入它。例如,对于路径1中的所有点,确定到路径2中所有点的距离。不确定从何处开始考虑分隔符不想同时使用括号和逗号,然后以可调用的方式构建数组。

1 个答案:

答案 0 :(得分:0)

以下代码读取数据(假设每行一个路径,没有额外的空格)到numpy数组列表中,然后演示如何计算两点之间的距离。

import numpy as np
import numpy.linalg as la

#replace with your datafile
datafile = "../data/point_path.txt"
paths = []
with open(datafile, "r") as f:
  for line in f:
    point_strs = line.strip().strip("[()]").split("),(")
    npoints = len(point_strs)
    path = np.empty((npoints, 3))
    for i in xrange(npoints):
      path[i,:] = np.array(map(int, point_strs[i].split(",")))
    paths.append(path)

print "First point of path 1:"
print paths[0][0]
print "Second point of path 2:"
print paths[1][1]

print "Euclidean Distance between these points:"
print la.norm(paths[0][0]-paths[1][1])

这个输出是:

First point of path 1:
[ 0.  1.  3.]
Second point of path 2:
[ 0.  4.  5.]
Euclidean Distance between these points:
3.60555127546

编辑:如何格式化输入文件
该代码假定每个点列表都在其自己的行上(例如,对于f中的行,解析点列表)。所以以下文件:

[(0,2,3),(0,4,0)] [(1,4,5),(5,8,9),(3,4,0)] [(0,5,7),(0,6,8),(1,5,6),(5,8,10)]

不起作用,因为所有3个列表都在同一行。

此格式:

[(0,2,3),(0,4,0)]
[(1,4,5),(5,8,9),(3,4,0)]
[(0,5,7),(0,6,8),(1,5,6),(5,8,10)]

将起作用,因为每个点列表都在一个单独的行上。