最初,文本文件用于使用GMT(通用映射工具)。 格式类似如下:
Basemap
其中'>'被识别为不同线段的分离符号。
现在,我使用mpl_toolkits
中的plt.plot
在地图上绘制线条。我只需要一个2D numpy数组,将坐标传递给与plt.scatter
或import 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()
我发现这种方式有点棘手而且不太喜欢它...有没有更常见,明确或正式用于此类情况的解决方案?欢迎任何建议。
答案 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]])