我的第一个python程序

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 断断续续自学python已经几个月了,但是没啥实质性的进展,特别是不常用,加上到面向对象之后,人都是晕晕的,这不是被迫要写一个案例嘛!实现将产生的数据插入到execl中去,但是是追加的方式,而不是覆盖,然后算出平均值和插入图表,最开始之前参考别人写的文章用xlsxwriter模块,但是后来发现这个只能一次性写入,数据会覆盖,所以弃之,用了xlrd和xlwt模块。
断断续续自学python已经几个月了,但是没啥实质性的进展,特别是不常用,加上到面向对象之后,人都是晕晕的,这不是被迫要写一个案例嘛!实现将产生的数据插入到execl中去,但是是追加的方式,而不是覆盖,然后算出平均值和插入图表,最开始之前参考别人写的文章用xlsxwriter模块,但是后来发现这个只能一次性写入,数据会覆盖,所以弃之,用了xlrd和xlwt模块。虽然暂时只实现了数据能追加写到execl中。
需求:一般我们选一个IDC机房,大多数的办法是用ping的方式去测试,但是这只能从icmp得出结果,我们试想一下除了icmp是不是还可以从tcp获取结果呢?主要是探测web服务质量,用cron每小时去执行一次python脚本,然后将产生的数据按系统当前时间插入到execl表中去分析结果。相当于做一个网络方面的测试。下面是一段代码主要是参考某人的书籍中。
#!/usr/bin/python
#coding=utf-8
import os,sys
import time
import pycurl
import xlrd
import xlwt
import xlutils
from xlrd import open_workbook
from xlutils.copy import copy

URL="http://www.baidu.com"
now = time.strftime('%H%M%S')
n = int(now[:2])
c = pycurl.Curl()
c.setopt(pycurl.URL, URL)
c.setopt(pycurl.CONNECTTIMEOUT, 5)
c.setopt(pycurl.TIMEOUT, 5)
c.setopt(pycurl.NOPROGRESS, 1)
c.setopt(pycurl.FORBID_REUSE, 1)
c.setopt(pycurl.MAXREDIRS, 1)
c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)

indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")
c.setopt(pycurl.WRITEHEADER, indexfile)
c.setopt(pycurl.WRITEDATA, indexfile)

try:
    c.perform()
except Exception,e:
    print "connection error:"+str(e)
    indexfile.close()
    c.close()
    sys.exit()

NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME)
CONNECT_TIME = c.getinfo(c.CONNECT_TIME)
TOTAL_TIME = c.getinfo(c.TOTAL_TIME)
HTTP_CODE = c.getinfo(c.HTTP_CODE)
SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD)
HEADER_SIZE = c.getinfo(c.HEADER_SIZE)
SPEED_DOWNLOAD=c.getinfo(c.SPEED_DOWNLOAD)

print "HTTP状态码: %s" %(HTTP_CODE)
print "DNS解析时间: %.2f ms" %(NAMELOOKUP_TIME*1000)
print "建立连接时间: %.2f ms" %(CONNECT_TIME*1000)
print "传输结束总时间: %.2f ms" %(TOTAL_TIME*1000)
print "下载数据包大小: %d bytes/s" %(SIZE_DOWNLOAD)
print "HTTP头部大小: %d byte" %(HEADER_SIZE)
print "平均下载速度: %d bytes/s" %(SPEED_DOWNLOAD)
indexfile.close()
c.close()
下面开始是我自己写的代码,可优化空间太大,作为一个初学者来说。请大家勿吐槽啊!
N = (0,1,2,3,4,5,6,7)
L = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
H = (00,01,02,03,04,05,06,07,'08','09',10,11,12,13,14,15,16,17,18,19,20,21,22,23)

if not os.path.exists('chart.xlsx'):
    w = xlwt.Workbook()
    sheet = w.add_sheet('chart.xlsx')
    w.save('chart.xlsx')
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[0], L[0], URL)
    sheet.write(N[0], L[1], H[0])
    sheet.write(N[0], L[2], H[1])
    sheet.write(N[0], L[3], H[2])
    sheet.write(N[0], L[4], H[3])
    sheet.write(N[0], L[5], H[4])
    sheet.write(N[0], L[6], H[5])
    sheet.write(N[0], L[7], H[6])
    sheet.write(N[0], L[8], H[7])
    sheet.write(N[0], L[9], H[8])
    sheet.write(N[0], L[10], H[9])
    sheet.write(N[0], L[11], H[10])
    sheet.write(N[0], L[12], H[11])
    sheet.write(N[0], L[13], H[12])
    sheet.write(N[0], L[14], H[13])
    sheet.write(N[0], L[15], H[14])
    sheet.write(N[0], L[16], H[15])
    sheet.write(N[0], L[17], H[16])
    sheet.write(N[0], L[18], H[17])
    sheet.write(N[0], L[19], H[18])
    sheet.write(N[0], L[20], H[19])
    sheet.write(N[0], L[21], H[20])
    sheet.write(N[0], L[22], H[21])
    sheet.write(N[0], L[23], H[22])
    sheet.write(N[0], L[24], H[23])
    sheet.write(N[0], L[25], u'平均值')
    sheet.write(N[1], L[0], u'HTTP状态码')
    sheet.write(N[2], L[0], u'DNS解析时间')
    sheet.write(N[3], L[0], u'建立连接时间')
    sheet.write(N[4], L[0], u'传输结束总时间')
    sheet.write(N[5], L[0], u'下载数据包大小')
    sheet.write(N[6], L[0], u'HTTP头部大小')
    sheet.write(N[7], L[0], u'平均下载速度')
    wb.save('chart.xlsx')

if n == 0:
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[1], L[1], HTTP_CODE)
    sheet.write(N[2], L[1], NAMELOOKUP_TIME*1000)
    sheet.write(N[3], L[1], CONNECT_TIME*1000)
    sheet.write(N[4], L[1], TOTAL_TIME*1000)
    sheet.write(N[5], L[1], SIZE_DOWNLOAD)
    sheet.write(N[6], L[1], HEADER_SIZE)
    sheet.write(N[7], L[1], SPEED_DOWNLOAD)
    wb.save('chart.xlsx')
elif n == 1:
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[1], L[2], HTTP_CODE)
    sheet.write(N[2], L[2], NAMELOOKUP_TIME*1000)
    sheet.write(N[3], L[2], CONNECT_TIME*1000)
    sheet.write(N[4], L[2], TOTAL_TIME*1000)
    sheet.write(N[5], L[2], SIZE_DOWNLOAD)
    sheet.write(N[6], L[2], HEADER_SIZE)
    sheet.write(N[7], L[2], SPEED_DOWNLOAD)
    wb.save('chart.xlsx')
......此刻省去了很多行,因为都是一样,只需要将==递增就行,然后L[X]中的值也是递增。
elif n == 23:
    rb = open_workbook('chart.xlsx')
    wb = copy(rb)
    sheet = wb.get_sheet(0)
    sheet.write(N[1], L[24], HTTP_CODE)
    sheet.write(N[2], L[24], NAMELOOKUP_TIME*1000)
    sheet.write(N[3], L[24], CONNECT_TIME*1000)
    sheet.write(N[4], L[24], TOTAL_TIME*1000)
    sheet.write(N[5], L[24], SIZE_DOWNLOAD)
    sheet.write(N[6], L[24], HEADER_SIZE)
    sheet.write(N[7], L[24], SPEED_DOWNLOAD)
    wb.save('chart.xlsx')
else:
    print '数据插入错误!'
最后我们用crontab每整点运行一次脚本。就可以看到数据啦!
下面大家看一下效果图啊!

需要改进的地方:
1、产生的excel文件肯定需要加上每天日期命名,并且是每天创建一个。
2、这个模块不知道如何求平均值。
3、不会插入图表。
这些问题争取在下一篇博客中解决哈!

目录
相关文章
|
1天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
6 3
|
4天前
|
存储 人工智能 数据挖掘
Python编程入门:构建你的第一个程序
【10月更文挑战第22天】编程,这个听起来高深莫测的词汇,实际上就像搭积木一样简单有趣。本文将带你走进Python的世界,用最浅显的语言和实例,让你轻松掌握编写第一个Python程序的方法。无论你是编程新手还是希望了解Python的爱好者,这篇文章都将是你的理想起点。让我们一起开始这段奇妙的编程之旅吧!
13 3
|
20天前
|
IDE 开发工具 Python
Python 编程入门:打造你的第一个程序
【10月更文挑战第6天】编程,这个听起来高大上又充满神秘感的领域,其实就像学习骑自行车一样。一开始你可能会觉得难以掌握平衡,但一旦你学会了,就能自由地穿梭在广阔的道路上。本文将带你走进 Python 的世界,用最简单的方式让你体验编写代码的乐趣。不需要复杂的理论,我们将通过一个简单的例子——制作一个猜数字游戏,来实践学习。准备好了吗?让我们开始吧!
|
22天前
|
存储 JSON 安全
面向企业应用程序的 Python 配置管理
面向企业应用程序的 Python 配置管理
25 9
|
23天前
|
人工智能 数据挖掘 程序员
Python 编程入门:打造你的第一个程序
【10月更文挑战第3天】编程,这个看似高深莫测的技能,实际上就像学骑自行车一样,一旦掌握,便能开启全新的世界。本文将带领初学者步入Python编程的殿堂,从基础语法到编写实用程序,一步步解锁编程的乐趣。
|
29天前
|
存储 UED Python
Python编程入门:打造你的第一个程序
【9月更文挑战第36天】在数字时代的浪潮中,编程已成为一项基础技能。本文以Python语言为例,通过构建一个简单的计算器程序,引领初学者步入编程的世界。从基础语法到实现功能,我们将一步步解锁编程的乐趣。无论你是编程新手还是想扩展知识边界的爱好者,这篇文章都将为你打开一扇通往编程世界的大门。让我们开始这段旅程,探索代码的魅力吧!
|
26天前
|
Python
Python编程---双色球选购程序
Python编程---双色球选购程序
20 1
|
26天前
|
小程序 iOS开发 MacOS
将Python代码转化为可执行的程序
将Python代码转化为可执行的程序
20 1
|
2月前
|
jenkins 持续交付 Docker
docker之自定义制作镜像(python程序)
docker之自定义制作镜像(python程序)
|
2月前
|
Python
Python 编程入门:打造你的第一个程序
【9月更文挑战第27天】编程,就像是在数字世界里绘画。想象一下,你手中的键盘是画笔,屏幕是画布,而代码则是你的颜料。这篇文章将带你走进编程的世界,学习如何使用 Python 这门语言来创建你的第一个程序。我们将从基础的语法开始,逐步深入到条件判断和循环结构,最终完成一个简单的猜数字游戏。无论你是否有编程经验,这里的内容都将为你打开一扇新的大门。