坐标(str)列表

时间:2015-01-31 12:59:56

标签: python python-2.7 python-3.x

我有一个包含地理坐标的非常长的txt文件。每行的格式如下所示:

501418.209 5314160.484 512.216
501418.215 5314160.471 512.186
501418.188 5314160.513 512.216

用空格(“”)分隔,最后用换行符(\ n)

我需要将该文件导入列表...到目前为止,我只能将其作为字符串导入,然后尝试转换为列表。不幸的是,我不知道如何保持txt文件的格式,因为我需要在每一行上执行计算。

到目前为止,我的解决方案是将txt文件导入字符串变量:

fileobj = file(source,'r')
data = ""
for line in fileobj.readlines():
    linevals = line.strip().split(" ")
    data += "%s %s %s\n" % (linevals[0], linevals[1], linevals[2])
print type(data)

我的导入列表无效的解决方案:

fileobj = file(source,'r')
data = []
for line in fileobj.readlines():
    linevals = line.strip().split(" ")
    data.append(linevals)

在stackoverflow上,我发现了许多建议eval函数的解决方案 - 但这不起作用,因为我需要将整行作为一个列表元素。希望很清楚。解决这个问题的方法有哪些我对python很陌生,但现在困扰我很长一段时间了。谢谢!

1 个答案:

答案 0 :(得分:3)

除了简单地将每一行拆分并转换为浮动之外,您不需要eval或其他任何东西:

with open(source) as f:
    for row in f:
        print(map(float,row.split()))

[501418.209, 5314160.484, 512.216]
[501418.215, 5314160.471, 512.186]
[501418.188, 5314160.513, 512.216]

如果您想要一个列表中的所有行:

with open(source) as f:
    data = [ map(float,row.split()) for row in f] #  python3 ->list(map(float,row.split()))
    print(data)
[[501418.209, 5314160.484, 512.216], [501418.215, 5314160.471, 512.186], [501418.188, 5314160.513, 512.216]]

或使用csv模块:

import  csv
with open(source) as f:
    data = [map(float,row) for row in csv.reader(f,delimiter=" ")]
    print(data)

如果您想要所有数据的平面列表:

with open(source) as f:
   data = []
   for row in f:
       data.extend(map(float,row.split())) 

如果您正在对数据进行大量工作,您可能会发现numpy非常有用:

import numpy as np

data = np.genfromtxt(source,delimiter=" ").flatten()