我的第一个python程序

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 断断续续自学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编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
1月前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
3天前
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
24 6
|
15天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
29天前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
59 9
|
26天前
|
存储 人工智能 数据挖掘
Python编程入门:打造你的第一个程序
本文旨在为初学者提供Python编程的初步指导,通过介绍Python语言的基础概念、开发环境的搭建以及一个简单的代码示例,帮助读者快速入门。文章将引导你理解编程思维,学会如何编写、运行和调试Python代码,从而开启编程之旅。
38 2
|
28天前
|
Python
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
43 5
|
27天前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
32 1
|
1月前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
1月前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
75 3