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')