通过自学两周在工作中用python写的一个应用,主要是获取网站txt格式的数据,插入到postgresql数据库中,由于网站txt格式数据每日更新,结合windows的计划任务或Linux的crontab计划来实现每日更新数据的要求。
源格式如下:
处理后的数据库中格式如下:
源码如下:
#coding=utf-8
#editor by huang hai yao
#2018-12-17
import urllib.request
import psycopg2
url = 'http://218.xx.xx.xx/yubao/data.txt'
#通过weburl地址打开获取txt数据
datas=urllib.request.urlopen(url)
dataset=[]
#循环读取txt每行数据
for data in datas.readlines():
#去除数据中的空格
data=data.strip()
#筛选数据中的空行
if len(data)!=0:
#用ANSI编码格式读取txt内容,否则会为乱码
dataset.append(data.decode('ANSI'))
#读取站点名称
stationName=dataset[0][:15]
jdIndex=dataset[0].index("经度")
wdIndex=dataset[0].index("纬度")
highIndex=dataset[0].index("观测场拔海高度")
#读取经度数据
stationJd=dataset[0][(jdIndex+3):wdIndex-1]
#读取纬度数据
stationWd=dataset[0][(wdIndex+3):highIndex-1]
#读取高度数据
stationHigh=float(dataset[0][(highIndex+8):-2])
#读取气象记录日期时间
stationDate=dataset[1][:11]
#读取站点降水量
stationWater=float(dataset[2][4:-2])
#读取站点最高气温
stationHighTemp=float(dataset[3][5:-1])
#读取站点最低气温
stationLowTemp=float(dataset[4][5:-1])
#读取站点风速
stationWindSpeedIndex=dataset[5].index("米")
stationWindSpeed=dataset[5][5:stationWindSpeedIndex]
#读取站点风速等级
windLevelIndex1=dataset[5].index("(")
windLevelIndex2=dataset[5].index("级")
stationWindLevel=dataset[5][windLevelIndex1+1:windLevelIndex2]
#关闭文件流
datas.close()
#获取Postgresql连接
conn=psycopg2.connect(database="front_db",user="resmg",password="resmgxx",
host="2.18.xx.xx",port="5432")
cur=conn.cursor()
#插入数据
sql="insert into jyqxsj108739(zdmc,jd,wd,gccbhgd,jlrq,jsl,zgqw," \
"zdwd,jdfs,fsdj)values({},{},{},{},{},{},{},{},{},{})"
cur.execute(sql.format(repr(stationName), repr(stationJd), repr(stationWd),
repr(stationHigh), repr(stationDate),
repr(stationWater), repr(stationHighTemp), repr(stationLowTemp),
repr(stationWindSpeed), repr(stationWindLevel)))
conn.commit()
print("插入成功")
conn.close()
注意要点如下: