python 读取GPS导航电文(字典转CSV)

import csv

path='C:\\Users\\admin\\Desktop\\15372370.06n'

with open(path, 'r', encoding='utf-8') as f:
    if f == 0:
        print("警告:不能打开文件!")
    else:
        print("GPS导航文件打开成功!")
    nfile_lines = f.readlines()  # 按行读取N文件
    print(len(nfile_lines))
    f.close()
    # # 将txt文件读入numpy数组
    # datamat = np.zeros((248, 4))
    # row_count = 0
    # for line in len(nfile_lines):
    # 	# 写入datamat
    #     line = line.strip().split(' ')
    #     datamat[row_count,:] = line[:]
    #     row_count += 1

def start_num():     ##定义数据记录的起始行
    for i in range(len(nfile_lines)):
        #print("第%d个字符:%s"%(i,nfile_lines[i]))
        if nfile_lines[i].find('END OF HEADER')!=-1:
            start_num=i+1
    return start_num
n_dic_list=[]

n_data_lines_nums=int((len(nfile_lines)-start_num())/8)
print("一共%d组数据"%(n_data_lines_nums))



#第j组,第i行
for j in range(n_data_lines_nums):
    n_dic = {}
    for i in range(8):
        data_content = nfile_lines[start_num() + 8 * j + i]
        print(data_content)
        n_dic['数据组数'] = j + 1
        # n_dic['小行'+str(i+1)]=data_content.strip('\n')
        if i == 0:  # 度单个卫星数据组第一行数据,下面雷同
            n_dic['卫星PRN号'] = int(data_content.strip('\n')[0:2].strip(' '))

            n_dic['历元'] = data_content.strip('\n')[3:22]

            n_dic['卫星钟偏差(s)'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
                                                                                  1:-4] + 'e' + data_content.strip(
                '\n')[23:41][-3:]).strip(' '))  # 利用字符串切片功能来进行字符串的修改
            n_dic['卫星钟漂移(s/s)'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
                                                                                    1:-4] + 'e' + data_content.strip(
                '\n')[42:60][-3:]).strip(' '))
            n_dic['卫星钟漂移速度(s/s*s)'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
                                                                                        1:-4] + 'e' + data_content.strip(
                '\n')[61:79][-3:]).strip(' '))

        if i == 1:
            n_dic['IODE'] = float((data_content.strip('\n')[4:22][0] + '0' + data_content.strip('\n')[4:22][
                                                                             1:-4] + 'e' + data_content.strip('\n')[
                                                                                           4:22][-3:]).strip(' '))
            n_dic['C_rs'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
                                                                              1:-4] + 'e' + data_content.strip('\n')[
                                                                                            23:41][-3:]).strip(' '))
            n_dic['n'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
                                                                           1:-4] + 'e' + data_content.strip('\n')[
                                                                                         42:60][-3:]).strip(' '))
            n_dic['M0'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
                                                                            1:-4] + 'e' + data_content.strip('\n')[
                                                                                          61:79][-3:]).strip(' '))
        if i == 2:
            n_dic['C_uc'] = float((data_content.strip('\n')[4:22][0] + '0' + data_content.strip('\n')[4:22][
                                                                             1:-4] + 'e' + data_content.strip('\n')[
                                                                                           4:22][-3:]).strip(' '))
            n_dic['e'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
                                                                           1:-4] + 'e' + data_content.strip('\n')[
                                                                                         23:41][-3:]).strip(' '))
            n_dic['C_us'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
                                                                              1:-4] + 'e' + data_content.strip('\n')[
                                                                                            42:60][-3:]).strip(' '))
            n_dic['sqrt_A'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
                                                                                1:-4] + 'e' + data_content.strip('\n')[
                                                                                              61:79][-3:]).strip(' '))
        if i == 3:
            n_dic['TEO'] = float((data_content.strip('\n')[4:22][0] + '0' + data_content.strip('\n')[4:22][
                                                                            1:-4] + 'e' + data_content.strip('\n')[
                                                                                          4:22][-3:]).strip(' '))
            n_dic['C_ic'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
                                                                              1:-4] + 'e' + data_content.strip('\n')[
                                                                                            23:41][-3:]).strip(' '))
            n_dic['OMEGA'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
                                                                               1:-4] + 'e' + data_content.strip('\n')[
                                                                                             42:60][-3:]).strip(' '))
            n_dic['C_is'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
                                                                              1:-4] + 'e' + data_content.strip('\n')[
                                                                                            61:79][-3:]).strip(' '))
        if i == 4:
            n_dic['I_0'] = float((data_content.strip('\n')[4:22][0] + '0' + data_content.strip('\n')[4:22][
                                                                            1:-4] + 'e' + data_content.strip('\n')[
                                                                                          4:22][-3:]).strip(' '))
            n_dic['C_rc'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
                                                                              1:-4] + 'e' + data_content.strip('\n')[
                                                                                            23:41][-3:]).strip(' '))
            n_dic['w'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
                                                                           1:-4] + 'e' + data_content.strip('\n')[
                                                                                         42:60][-3:]).strip(' '))
            n_dic['OMEGA_DOT'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
                                                                                   1:-4] + 'e' + data_content.strip(
                '\n')[61:79][-3:]).strip(' '))
        if i == 5:
            n_dic['i'] = float((data_content.strip('\n')[4:22][0] + '0' + data_content.strip('\n')[4:22][
                                                                          1:-4] + 'e' + data_content.strip('\n')[4:22][
                                                                                        -3:]).strip(' '))
            n_dic['L2_code'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
                                                                                 1:-4] + 'e' + data_content.strip('\n')[
                                                                                               23:41][-3:]).strip(' '))
            n_dic['PS_week_num'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
                                                                                     1:-4] + 'e' + data_content.strip(
                '\n')[42:60][-3:]).strip(' '))
            n_dic['L2_P_code'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
                                                                                   1:-4] + 'e' + data_content.strip(
                '\n')[61:79][-3:]).strip(' '))
        if i == 6:
            n_dic['卫星精度(m)'] = float((data_content.strip('\n')[4:22][0] + '0' + data_content.strip('\n')[4:22][
                                                                                1:-4] + 'e' + data_content.strip('\n')[
                                                                                              4:22][-3:]).strip(' '))
            n_dic['卫星健康状态'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
                                                                                1:-4] + 'e' + data_content.strip('\n')[
                                                                                              23:41][-3:]).strip(' '))
            n_dic['TGD'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
                                                                             1:-4] + 'e' + data_content.strip('\n')[
                                                                                           42:60][-3:]).strip(' '))
            n_dic['IODC'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
                                                                              1:-4] + 'e' + data_content.strip('\n')[
                                                                                            61:79][-3:]).strip(' '))
        # if i == 7:
        #     n_dic['电文发送时刻'] = float((data_content.strip('\n')[4:22][0] + '0' + data_content.strip('\n')[4:22][
        #                                                                        1:-4] + 'e' + data_content.strip('\n')[
        #                                                                                      4:22][-3:]).strip(' '))
        #     n_dic['拟合区间(h)'] = float((data_content.strip('\n')[23:41][0] + '0' + data_content.strip('\n')[23:41][
        #                                                                          1:-4] + 'e' + data_content.strip('\n')[
        #                                                                                        23:41][-3:]).strip(' '))
        #     try:
        #         n_dic['备用1'] = float((data_content.strip('\n')[42:60][0] + '0' + data_content.strip('\n')[42:60][
        #                                                                          1:-4] + 'e' + data_content.strip('\n')[
        #                                                                                        42:60][-3:]).strip(' '))
        #     except:
        #         pass
        #     try:
        #         n_dic['备用2'] = float((data_content.strip('\n')[61:79][0] + '0' + data_content.strip('\n')[61:79][
        #                                                                          1:-4] + 'e' + data_content.strip('\n')[
        #                                                                                        61:79][-3:]).strip(' '))
        #     except:
        #         pass
    n_dic_list.append(n_dic)

print(n_dic_list)
with open( "C:\\Users\\admin\\Desktop"+ "\\" + "example.csv", 'w', newline='', encoding='utf-8') as f:
    #csv_writer = csv.writer(f)
    #writerow把列表写入同一行
    #下面这个函数效果等同于
    #csv_writer.writerow(n_dic.keys())
    #csv_writer.writerow()
    header=['数据组数', '卫星PRN号', '历元', '卫星钟偏差(s)', '卫星钟漂移(s/s)', '卫星钟漂移速度(s/s*s)',
                         'IODE', 'C_rs', 'n', 'M0', 'C_uc', 'e', 'C_us', 'sqrt_A', 'TEO', 'C_ic', 'OMEGA', 'C_is',
                         'I_0', 'C_rc', 'w', 'OMEGA_DOT',
                         'i', 'L2_code', 'PS_week_num', 'L2_P_code',
                         '卫星精度(m)', '卫星健康状态', 'TGD', 'IODC']
    writer = csv.DictWriter(f, fieldnames=header)
    writer.writeheader()
    writer.writerows(n_dic_list)

f.close()



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫杨傲天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值