Python - 从包含分离符号的文本文件中读取lat / long坐标

时间:2018-04-13 10:57:03

标签: python numpy

最初,文本文件用于使用GMT(通用映射工具)。 格式类似如下:

Basemap

其中'>'被识别为不同线段的分离符号。

现在,我使用mpl_toolkits中的plt.plot在地图上绘制线条。我只需要一个2D numpy数组,将坐标传递给与plt.scatterimport numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap from io import StringIO file = open("latlon.txt", "r") data = file.read() data = data.replace('>','nan\tnan') # Use nan,nan to isolate different segments of lines in plt.plot # Also, np.genfromtxt cannot directly read such kinds of data # due to inconsistent of columns for certain lines in the file, # hence the replacement line_xy = np.genfromtxt(StringIO(unicode(data))) (plotting stuffs...) 大致相同的函数。

这是我提出的一个简单的解决方案:

def positions_list(db, limit=10):
    cur = db.cursor()
    sql = "SELECT id, timestamp, owner, title, location, company, description FROM positions ORDER BY TIMESTAMP DESC LIMIT "+str(limit)+""
    cur.execute(sql)
    return cur.fetchall()

我发现这种方式有点棘手而且不太喜欢它...有没有更常见,明确或正式用于此类情况的解决方案?欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

如果您可以访问Pandas工具包,那么pandas.read_csv()函数可用于解析您的数据,并将其转换为浮点数组:

import pandas as pd
df = pd.read_csv('data.txt', sep='\s+', header=None)
array = df.apply(pd.to_numeric, args=('coerce',)).values

这里,read_csv()会将数据文件中的列视为由空格分隔,并返回字符串的DataFrame。 apply()行然后将这些转换为浮点数,将无效条目(例如'>')强制转换为NaN。然后.values属性将DataFrame的内容提取为普通numpy.ndarray。这给出了:

array([[ 122.  ,   55.  ],
       [ 122.  ,   56.  ],
       [ 122.5 ,   57.  ],
       [    nan,     nan],
       [ 123.  ,   25.25],
       [ 123.  ,   25.27]])