import numpy as np
import my_class
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
hpa_list = [1000, 925, 850, 700, 500, 400, 300, 250, 200, 150, 100] # 气压场
hour_list = [8, 20] # 小时 # 存储百帕(1000~100),天(16~19),小时(08,20)纬度,经度
day = 16
while day <= 19: # 天数循环
for hour in hour_list:
lat = np.arange(0, 90 + 2.5, 2.5) * 180 / np.pi
lon = np.arange(0, 180 + 2.5, 2.5)
hour = str(hour).zfill(2) # 将8变成08
hpa_num = 0
sandu_mid = np.zeros((11, 29, 45))
for hpa in hpa_list:
u_mid = np.zeros((37, 73))
v_mid = np.zeros((37, 73))
file_uv = r"D:\lunwen\lunwenshuju\各种作业数据\uv\\" + str(hpa) + "\\202203" + str(day) + str(hour) + ".txt"
f_uv = open(file_uv, 'r')
for delect_lines in range(3): # 读取调开头某些行
a_1 = f_uv.readline()
lines = f_uv.readlines()
dataset = []
for line in lines:
data = line.strip("\n")
data = data.split('\t')
dataset.append(data)
dataset = np.array(dataset)
i_lat = 0
data_line = 0
# 先读取u分量数据
while i_lat < 37:
i_reverse_lat = 36 - i_lat
i_lon = 0
c = (i_lat + 1) * 8 - 1
while data_line < c:
kk = 0
times = 0
while times < 10:
if dataset[data_line][0][kk + 4] == ' ':
u_mid[ i_reverse_lat, i_lon] = u_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 5])
i_lon = i_lon + 1
kk = kk + 5
elif dataset[data_line][0][kk + 5] == ' ':
u_mid[i_reverse_lat, i_lon] = u_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 6])
i_lon = i_lon + 1
kk = kk + 6
elif dataset[data_line][0][kk + 6] == ' ':
u_mid[ i_reverse_lat, i_lon] = u_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 7])
i_lon = i_lon + 1
kk = kk + 7
times = times + 1
data_line = data_line + 1
kk = 0
times = 0
while times < 3:
if dataset[data_line][0][kk + 4] == ' ':
u_mid[i_reverse_lat, i_lon] = u_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 5])
i_lon = i_lon + 1
kk = kk + 5
elif dataset[data_line][0][kk + 5] == ' ':
u_mid[ i_reverse_lat, i_lon] = u_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 6])
i_lon = i_lon + 1
kk = kk + 6
elif dataset[data_line][0][kk + 6] == ' ':
u_mid[i_reverse_lat, i_lon] = u_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 7])
i_lon = i_lon + 1
kk = kk + 7
times = times + 1
data_line = data_line + 1
i_lat = i_lat + 1
# 再读取V分量数据
while i_lat - 37 < 37:
i_reverse_lat = 36 - i_lat + 37
i_lon = 0
c = (i_lat + 1) * 8 - 1
while data_line < c:
kk = 0
times = 0
while times < 10:
if dataset[data_line][0][kk + 4] == ' ':
v_mid[ i_reverse_lat, i_lon] = v_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 5])
i_lon = i_lon + 1
kk = kk + 5
elif dataset[data_line][0][kk + 5] == ' ':
v_mid[i_reverse_lat, i_lon] = v_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 6])
i_lon = i_lon + 1
kk = kk + 6
elif dataset[data_line][0][kk + 6] == ' ':
v_mid[i_reverse_lat, i_lon] = v_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 7])
i_lon = i_lon + 1
kk = kk + 7
times = times + 1
data_line = data_line + 1
kk = 0
times = 0
while times < 3:
if dataset[data_line][0][kk + 4] == ' ':
v_mid[ i_reverse_lat, i_lon] = v_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 5])
i_lon = i_lon + 1
kk = kk + 5
elif dataset[data_line][0][kk + 5] == ' ':
v_mid[ i_reverse_lat, i_lon] = v_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 6])
i_lon = i_lon + 1
kk = kk + 6
elif dataset[data_line][0][kk + 6] == ' ':
v_mid[ i_reverse_lat, i_lon] = v_mid[
i_reverse_lat, i_lon] + float(
dataset[data_line][0][kk:kk + 7])
i_lon = i_lon + 1
kk = kk + 7
times = times + 1
data_line = data_line + 1
i_lat = i_lat + 1
针对txt文件中的数据个数位数不统一情况,并且存储不是每行数据个数都一致的情况,利用多种情况读取空格进行判断,只要读取到时空格则判断与上一次为同一个数据,并且利用多重循环,首选循环每一个大数据组,在循环每一个小数据组的每一行,在循环每一行的每一个读取到数组中。