问题描述
现有一批数据,格式如下图,第一列是站码,第二列是值,第三列是时间。
现要求处理成如下格式,即第一列是站码,第二列是时间(时间格式改为 年/月/日 时:分),第三列是值。
注意:文件较大,无法用Excel一次性加载完全,考虑用Python编程处理。
解决方案
读取创建文件
fi = open("wucheng-water.csv") #读取需要修改格式的文件
fo = open("wucheng-water改.csv", "w+") #创建新文件用于存储处理好的数据
函数:交换时间与值两列
def switch(line): #交换时间与值两列
line = line.strip("\n") #去除字符串两端的空格
ls = line.split(",") #将字符串以逗号分隔成列表
temp = ls[1] #temp作为中介变量完成时间与值两列的交换
ls[1] = ls[2]
ls[2] = temp
return ls
函数:处理日期时间的格式
def timeprocess(ls): #处理时间列格式
dt = eval(ls[1]) #去除时间两端引号
dt = dt.split(" ") #把日期与时间分开
date = dt[0].split("/") #日期以“/”分开
date = date[::-1] #倒序日期
date = "/".join(date) #日期重新连接
time = dt[1][:-3] #删去时间后三列
dt = "\"" + date + " " +time + "\"" #重新合成日期
ls[1] = dt #添加引号
return ls
单独处理表头
title = next(fi) #读取表头,接下来从第二行开始
ls = switch(title)
fo.write(",".join(ls) + "\n") # 输出列表ls
程序主体部分
for line in fi:
ls = switch(line)
ls = timeprocess(ls)
fo.write(",".join(ls) + "\n") #输出列表ls
完整代码
#2020/5/27 降雨数据处理
fi = open("wucheng-water.csv") #读取需要修改格式的文件
fo = open("wucheng-water改.csv", "w+") #创建新文件用于存储处理好的数据
def switch(line): #交换时间与值两列
line = line.strip("\n") #去除字符串两端的空格
ls = line.split(",") #将字符串以逗号分隔成列表
temp = ls[1] #temp作为中介变量完成时间与值两列的交换
ls[1] = ls[2]
ls[2] = temp
return ls
def timeprocess(ls): #处理时间列格式
dt = eval(ls[1]) #去除时间两端引号
dt = dt.split(" ") #把日期与时间分开
date = dt[0].split("/") #日期以“/”分开
date = date[::-1] #倒序日期
date = "/".join(date) #日期重新连接
time = dt[1][:-3] #删去时间后三列
dt = "\"" + date + " " +time + "\"" #重新合成日期
ls[1] = dt #添加引号
return ls
title = next(fi) #读取表头,接下来从第二行开始
ls = switch(title)
fo.write(",".join(ls) + "\n") # 输出列表ls
for line in fi:
ls = switch(line)
ls = timeprocess(ls)
fo.write(",".join(ls) + "\n") #输出列表ls
fo.close()
fi.close()
处理结果
数据文件及程序
请点此降雨数据下载。