我的第一个python项目是一个转换器,用于MySQL导入时获取形状数据。
我已经用target.writelines(data[start:stop])
删除了文件中所有不需要的行。在
现在我有大约2000行这样的台词:
12011,54,0,.375,-.183,2.325,1.221,0.016,0,0431.4,.345,1.563,25.13,13.23
而54代表儒略日。在
对于导入到包含3行(datetime、value id、value)的表,应该将其转换为:
2011-23-02 00:00:00,1,-0.183
2011-23-02 00:00:00,2,2.325
2011-23-02 00:00:00,3,1.221
2011-23-02 00:00:00,4,0
2011-23-02 00:00:00,5,0.016
2011-23-02 00:00:00,6,0
2011-23-02 00:00:00,7,0
2011-23-02 00:00:00,8431.4
2011-23-02 00:00:00,9,0.345
2011-23-02 00:00:00,10,1.563
请注意,第一个、第五个和最后两个值已被删除。第一个和第五个出现在每一行中,最后两个只在0点和12点出现。在
我读过julian的转换可以用datetime模块(Convert julian day into date)存档。在
您建议使用哪些Python工具来高效地完成任务?在
更新
谢谢你CoDEmanX,我实现了你建议的代码与一些替代,并几乎完成。剩下2个问题:
是否有一种内置的方式来正确处理闰年(例如,儒略60应该是闰年的2月29日,其他年份应该是3月1日)?
我试图实现时间(小时,分钟)。由于时间变量的长度不同(1-4个字符),我当前的实现只能在1000到2355之间工作。我可以轮询时间长度,并为每种情况制作日期格式命令。我想有一个更简单的解决办法。在
lines = f_open.readlines()
# split string and ignore unwanted elements
for line in lines:
_, year, julian, time, value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, *_ = line.split(",")
# format date, convert julian day-of-year to 'day-month'
date = "%s-%s %s:%s:00" % (int(year), datetime.strptime(julian, "%j").strftime("%m-%d"), time[:2], time[2:])
with open(targetName, 'a') as target:
target.write(",".join((date, "1", value1+"\n")))
target.write(",".join((date, "2", value2+"\n")))
target.write(",".join((date, "3", value3+"\n")))
target.write(",".join((date, "4", value4+"\n")))
target.write(",".join((date, "5", value5+"\n")))
target.write(",".join((date, "6", value6+"\n")))
target.write(",".join((date, "7", value7+"\n")))
target.write(",".join((date, "8", value8+"\n")))
target.write(",".join((date, "9", value9+"\n")))
target.write(",".join((date, "10", value10+"\n")))
内置的python模块应该足够了。避免使用premature optimization,只在简单的解决方案太慢时寻找提高速度和效率的方法。在
真正的朱利安日期中的闰年是不容易处理的,尤其是在维基关于Julian calendar的文章中——它甚至不一致(例如在公元前45年左右改为日历系统)。在
^{pr2}$datetime
模块确实将闰年纳入会计核算,但是,如果您提供了年份和日期:因此,您可以计算日期,如下所示:
再加上将值拆分为多行:
^{4}$相关问题 更多 >
编程相关推荐