由于我在学习气候资料时缺乏使用python的经验,我遇到了问题。我有一个相当大的CSV文件(NetCDF4格式的原始数据),有多个列(纬度,经度,氨浓度和日期(YYYY-MM-DD小时 - 分 - 秒格式))。这是由卫星设备测量的点数据。
但是,为了进行分析,我想将此CSV文件拆分为Biweekly格式以在Arcgis中使用(因此每月2个csv文件,1-15和16个结尾)。我可以手动完成这项工作,但这样做多年可能会非常低效。
非常欢迎任何指向正确方向或提示的指示。
谢谢,
答案 0 :(得分:0)
我写了一个简短的脚本,如:
out_file_idx = 0
def open_next_file(): return open('splitdata_%s.csv' % out_file_idx, 'w')
out_file = open_next_file()
for line in open('mydata.csv'):
date = line.split(',')[-1] # last cell in CSV is date as you mentioned
if current_day_is_15_and_previous_day_is_not_15()
or current_day_is_1_and_previous_day_is_not_1():
out_file.close()
out_file_idx += 1
out_file = open_next_file()
out_file.write(line)
out_file.write('\n')
当然,您必须在条件语句中实现这两个函数,并实际使用date
变量。希望它有所帮助!
答案 1 :(得分:0)
这可能会有所帮助:
import csv
import datetime
import sys
import os.path
def key(date):
date = datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
date = datetime.date(date.year,
date.month,
1 if date.day < 16 else 16)
date = date.strftime('%Y-%m-%d')
return date
old_key = None
for filename in sys.argv[1:]:
with open(filename) as file_in:
base, ext = os.path.splitext(filename)
rows_in = csv.reader(file_in)
for row in rows_in:
new_key = key(row[3])
if new_key != old_key:
old_key = new_key
filename_out = '%s-%s%s'%(base, new_key, ext)
file_out = open(filename_out, 'w')
rows_out = csv.writer(file_out)
rows_out.writerow(row)