Python 读取不规则位数的txt文件

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文件中的数据个数位数不统一情况,并且存储不是每行数据个数都一致的情况,利用多种情况读取空格进行判断,只要读取到时空格则判断与上一次为同一个数据,并且利用多重循环,首选循环每一个大数据组,在循环每一个小数据组的每一行,在循环每一行的每一个读取到数组中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值