将 txt 加载到结构化数组并添加一列文件名中的值

loadtxt to structured array and adding one column with value from filename

我是 python 和 nupmy 的新手。

我必须从 txt 文件中导入一些数据并将其插入到 postgresql 数据库中。

我是这样读取数据的:

type_definitions = ([('StationID', 'S4'), ('East', np.float), ('North', np.float), ('Height', np.float)])
filename = os.path.join(directory, file)
day = file.split('_')[2]
day = DoW.split('.')[0]
DataSet[day] = np.loadtxt(fname=filename, usecols=[0, 1, 2, 3], dtype=type_definitions)

这对我来说没问题。 (它是几个文件循环的一部分。每个“天”是一个文件) 下一步是将 DataSet 值连接到 sql 查询的字符串:

values = ', '.join(map(str, DataSet[day]))
sql = "INSERT INTO tm_utm (day, station, east, north, height) VALUES {}".format(values)

我必须添加到 sql 查询的 'day' 不是文本文件的一部分,但它在文件名中。所以我拆分了 'day'.

的电影名

不幸的是,我没有在第一列值中写入 'day'。我尝试了几种不同的方法,比如向 DataSet 添加数组:

day2 = (np.ones(len(DataSet[Dow]['Stations'])) * int(day))

但是我未能将 day2 数组添加到数据集结构中。

任何建议,如何添加 'day' 值? 谢谢你的帮助!

编辑: 这是 sql 查询的样子。 缺少当天的值。

INSERT INTO tm_utm (day, station, east, north, height) VALUES (b'2547', 32394691.312, 5693210.5467, 264.5246), (b'6578', 32362171.6427, 5702679.4317, 217.2954) ...

好的,我做到了。 不是很优雅,但是很管用。

weekday = int(day)
for i in range(0, len(DataSet[day]['StationID'])-1):
    StationID = DataSet[day]['StationID'][i].decode('UTF-8')
    East = DataSet[day]['East'][i]
    North = DataSet[day]['North'][i]
    Height = DataSet[day]['Height'][i]
    sql_query = "INSERT INTO tm_utm (day, station, east, north, height) VALUES ({}, \'{}\', {}, {}, {})".format(weekday, StationID, East, North, Height)
    print(sql_query)

插入 tm_utm(日、站、东、北、高度)值(21160,'ABFH',32319923.5979,5656881.7123,156.0891)