利用json文件读取命名规则,后读取潮位数据,转为指定格式存入json (基于python3.6)

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# @File:write_tide_json
# @Author:moucong
# @Datetime:2018/3/29 18:15
# @Software: PyCharm

import json
import os
import datetime
import time
import linecache

# original file path
file_path = "E:/transer/git_transer/transer/filepath/"
# json_save_path
save_path = "E:/transer/git_transer/transer/format_json/"

dataJson = json.load(open('format_file.json',encoding='UTF-8'))
wl_dat = dataJson["WL_DAT"]
wl_dat_file_path = file_path + wl_dat["filename"]
wl_dat_name = wl_dat["name"]
wl_dat_filename = wl_dat["filename"]
wl_dat_savename = wl_dat["save_name"]

wl = dataJson["WL"]
wl_file_path = file_path + wl["filename"]
wl_name = wl["name"]
wl_filename = wl["filename"]
wl_savename = wl["save_name"]

#每分钟潮位时间格式转化
def wl_time_format(JDtime,times,hour_time,minute_time):
JDtime = JDtime + minute_time * 60
dt = times + 'T'+ hour_time
time_array = datetime.datetime.strptime(dt, '%Y%m%dT%H:%M:%S')
timestamp = time.mktime(time_array.timetuple())
stime = float(JDtime) + timestamp
dt_new = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(float(stime)))
return dt_new

#高(低)潮位时间格式转化
def wl_high_low_time(max_time,create_time):
_time = []
for i in max_time:
_time.append(i)
Time = _time[0]+_time[1] + ':' +_time[2]+_time[3]+':00'
dt = create_time + 'T' + Time
time_array = datetime.datetime.strptime(dt, '%Y%m%dT%H:%M:%S')
timestamp = time.mktime(time_array.timetuple())
dt_new = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(float(timestamp)))
return dt_new

# print(_time)

#时间格式转化
def time_format(JDtime,times,start_time):
JDtime = JDtime
dt = times + 'T'+ start_time
time_array = datetime.datetime.strptime(dt, '%Y%m%dT%H:%M:%S')
timestamp = time.mktime(time_array.timetuple())
stime = float(JDtime) + timestamp
dt_new = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(float(stime)))
return dt_new


#写入json文件
def Write_json(save_path,data,savename):
if os.path.exists(save_path + savename + ".json") is False:
with open(save_path + savename + ".json", "w", encoding='utf-8') as f:
result = json.dump(data, f, ensure_ascii=False)
print('已写入' + ' ' + savename + ".json")
return result
else:
print('已存在' + ' ' + savename + ".json")
pass


# 整点潮位
def json_wl_dat(filepath, filename, name, savename):
# line = list(map(float,linecache.getline(filepath, 1).split()))
id = filename
id = id.split(".")
json_list = []
lineList = []
number = 1
with open(filepath, "r") as fp:
while True:
line = fp.readline()
line_data = list(map(str,linecache.getline(filepath, number).split()))
lineList.append(line_data)
number = number + 1
if not line:
break
create_time = lineList[0][0]
lineList.remove([]) #移除空list


# h_data = [Line[1:][i:i + 2] for i in range(0, len(line[1:]), 2)]
i = len(lineList[0])-11
j = 0
k = 1
start_time = '00:00:00'
while j < i:
hour = {"name": name, "stationid": "", "createAt": " ", "type": "h", "tidal_level": "",
"high_tide1": "", "high_tide1_at": "", "low_tide1": "", "low_tide1_at": "",
"high_tide2": "", "high_tide2_at": "", "low_tide2": "", "low_tide2_at": ""}
hour["tidal_level"] = lineList[0][j+1]
hour["high_tide1"] = lineList[0][-10]
hour["high_tide1_at"] = wl_high_low_time(lineList[0][-9], create_time)
hour["high_tide2"] = lineList[0][-8]
hour["high_tide2_at"] = wl_high_low_time(lineList[0][-7], create_time)
hour["low_tide1"] = lineList[0][-5]
hour["low_tide1_at"] = wl_high_low_time(lineList[0][-4], create_time)
hour["low_tide2"] = lineList[0][-3]
hour["low_tide2_at"] = wl_high_low_time(lineList[0][-2], create_time)
hour["createAt"] = time_format(3600 * j, create_time, start_time)
hour["stationid"] = id[1]
json_list.append(hour)
j = j + 1
k = k + 1
# print(hour)
Write_json(save_path, json_list, savename)

# 每分钟潮位
def json_wl(filepath, filename, name, savename):
# line = list(map(float,linecache.getline(filepath, 1).split()))
id = filename
id = id.split(".")
json_list = []
lineList = []
number = 1
with open(filepath, "r") as fp:
while True:
line = fp.readline()
line_data = list(map(str,linecache.getline(filepath, number).split()))
lineList.append(line_data)
number = number + 1
if not line:
break
create_time = lineList[0][0]
lineList.remove([]) #移除空list


# h_data = [Line[1:][i:i + 2] for i in range(0, len(line[1:]), 2)]
i = len(lineList)-2
j = 0
m = len(lineList[1])-1
n = 0
k = 1
start_time = '00:00:00'
while j < i:
while n < m:
hour = {"name": name, "stationid": "", "createAt": " ", "type": "m", "tidal_level": "",
"high_tide1": "", "high_tide1_at": "", "low_tide1": "", "low_tide1_at": "",
"high_tide2": "", "high_tide2_at": "", "low_tide2": "", "low_tide2_at": ""}
hour["tidal_level"] = lineList[j+1][n+1]
hour["high_tide1"] = lineList[25][-10]
hour["high_tide1_at"] = wl_high_low_time(lineList[25][-9], create_time)
hour["high_tide2"] = lineList[25][-8]
hour["high_tide2_at"] = wl_high_low_time(lineList[25][-7], create_time)
hour["low_tide1"] = lineList[25][-5]
hour["low_tide1_at"] = wl_high_low_time(lineList[25][-4], create_time)
hour["low_tide2"] = lineList[25][-3]
hour["low_tide2_at"] = wl_high_low_time(lineList[25][-2], create_time)
hour["createAt"] = wl_time_format(3600 * j, create_time, start_time, k)
hour["stationid"] = id[1]
json_list.append(hour)
k = k + 1
n = n + 1
n = 0
k = 1
j = j + 1

# print(hour)
Write_json(save_path, json_list, savename)

if __name__ == '__main__':
json_wl_dat(wl_dat_file_path, wl_dat_filename, wl_dat_name, wl_dat_savename)
json_wl(wl_file_path, wl_filename, wl_name, wl_savename)
原文地址:https://www.cnblogs.com/setname/p/8676538.html