python,初学者应用实例:读取文件中的数据,将将北京时间转换成世界时间,再保存成新的CSV格式文件

数据格式转换是科研工作中经常需要完成的任务。本程序实现了这个功能。将文本文件“TableS1.dat”中的数据读取,原文件格式为:

No Date Time Mag Dis
1 1999/07/25 05:28:39.580
2 1999/07/25 23:06:31.940
3 1999/08/06 01:54:40.600 1.0 12.5
4 1999/08/17 08:01:14.260
5 1999/08/19 23:15:47.320 0.7 1

该文件数据间隔为空,但空格数不一致,有时还用的是制表符,因此程序开关一段代码(已经注释掉)实现的是将这个文本文件读取并转存为标准的CSV文件。

然后再读取CSV文件,完成北京时间转换为世界时,并另存为“UTC_Table.csv”。这段代码虽然不长,但实现了数据读取,处理,时间格式处理等功能,具有很好的参考价值。

完整代码如下:

import time
import pandas as pds

# 将原始数据文件TableS1.dat转成标准的CSV文件。注意原始文件中输入数据的空格不规范,空格数不相同,有的还是制表符。
# with open('newTableS1.csv', 'w') as f1:
#     with open('TableS1.dat', 'r') as f2:
#         for line in f2:
#             old_line = line.strip().split('\t')
#             new_line = [i for i in old_line if i != '']
#             print(new_line)
#             new_line = ','.join(new_line)
#             print(new_line)
#             f1.write(new_line + '\n')

data = pds.read_csv('newTableS1.csv')
btc_date = data['Date']
btc_time = data['Time']
with open('UTC_table.csv', 'w') as f:
    f.write('No,Date,Time,Mag,Dis' + '\n')
    for i in range(len(btc_date)):
        hr, min, sec = btc_time[i].strip().split(':')
        utc = btc_date[i] + '-' + hr
        utc_str = time.strptime(utc, '%Y/%m/%d-%H')  # 将当前时间字符串转换为结构化时间,注意,这里只把小时加进来,分和秒不影响北京时转世界时
        utc_timestamp = time.mktime(utc_str)  #将结构化时间转换为时间戳
        new_date = time.gmtime(utc_timestamp) # 将时间戳转换成世界时结构化时间
        utc_date = '/'.join([str(new_date.tm_year), str(new_date.tm_mon), str(new_date.tm_mday)])
        utc_time = ':'.join([str(new_date.tm_hour), min, sec])
        new_line = [str(data['No'].loc[i]), utc_date, utc_time, str(data['Mag'].loc[i]), str(data['Dis'].loc[i])]
        new_line = [i for i in new_line if str(i) != 'nan'] # 删除空元素
        line = ','.join(new_line)
        print(line)
        f.write(line + '\n')

  

 

posted @ 2020-05-22 19:16  Iceberg_710815  阅读(589)  评论(0编辑  收藏  举报