Python 使用xlsxwriter绘制Excel表格

最近在统计资产,正好看到了xlsxwriter这个表格生成模块,借此机会,熟悉一下,写点有趣的小案例,一开始想使用C++ QT图形化开发一套自动化运维平台,但后来发现不仅消耗时间而且需要解决QT Qssh远程模块的一些问题,后来没有使用QT做,xlsxwriter模块来做非常的简单,所以使用它。

上班不能摸鱼,我要努力摸鱼,不不不,学习,不然今天我摸鱼,明天鱼摸我。。

绘制磁盘统计(封装表格)

封装前需要先来找出规律: 先找到表格生成坐标与大小之间的比值关系,这是第一步。

import xlsxwriter

workbook = xlsxwriter.Workbook('chart_line.xlsx')

worksheet3 = workbook.add_worksheet("系统磁盘统计")
merge_format = workbook.add_format({
    'bold':     True,'border':   1,'align':    'center','valign':   'vcenter','fg_color': '#EEAEEE',})

worksheet3.merge_range('A9:B12','192.168.1.1',merge_format)
# -------------------------------------------------------------------------

head = ["IP地址","IP地址","路径","总容量","剩余容量","利用率"]
merge_format1 = workbook.add_format({
    'bold':     True,#水平居中
    'valign':   'vcenter',#垂直居中
    'fg_color': '#AEEEEE',#颜色填充
})
worksheet3.write_row("A8:B12",head,merge_format1)        #显示表头
worksheet3.merge_range('A8:B8',merge_format1)   # 合并表头(合并第一个元素)


data1 = ["/etc/system/winsss/aaa","/proc/","/sys","/abc/lyshark"]
merge_format2 = workbook.add_format\
        ({'bold': True,'border': 1,'valign': 'vcenter','fg_color': '#D7E4BC','align': 'center'})

worksheet3.write_column("C9",data1,merge_format2)
worksheet3.set_column("C9:C9",30)


data2 = ["1024GG","2048GB","111GB","1111GB"]
merge_format3 = workbook.add_format\
        ({'bold': True,'align': 'center'})
worksheet3.write_column("D9",data2,merge_format3)
worksheet3.set_column("D9:D9",20)


data3 = ["1024GG","22GB"]
merge_format4 = workbook.add_format\
        ({'bold': True,'align': 'center'})
worksheet3.write_column("E9",data3,merge_format4)
worksheet3.set_column("E9:E9",20)


data4= ["10%","50%","20%","33%"]
merge_format5 = workbook.add_format\
        ({'bold': True,'align': 'center'})
worksheet3.write_column("F9",data4,merge_format5)
worksheet3.set_column("F9:F9",20)

'''
val = 
[
    ["IP地址","利用率"],
    ["/etc/","/proc","/user","/test","lyshark"],["1GB","2GB","3GB","4GB","5GB"],["10%","10%","10%"]
]

SetDiskTable(address,val)
'''
workbook.close()

接着对其进行封装:找到规律后就要对其进行封装,封装成一个可直接调用的方法。

import xlsxwriter

workbook = xlsxwriter.Workbook('chart_line.xlsx')
worksheet = workbook.add_worksheet("系统磁盘统计")

def CreateDiskTable(address,data,section):
    merge_format = workbook.add_format(
        {'bold': True,'align': 'center','fg_color': '#EEAEEE'})

    header_count = len(data[1])
    merge_format1 = workbook.add_format(
        {'bold': True,'fg_color': '#AEEEEE'})

    # 根据磁盘路径计算出表格大小
    header_range = "A{}:B{}".format(section,section+header_count)
    worksheet.write_row(header_range,data[0],merge_format1)  # 显示表头

    # 计算合并表头偏移
    header_merge_range = "A{}:B{}".format(section,section)
    worksheet.merge_range(header_merge_range,merge_format1)  # 合并表头(合并第一个元素)

    # 计算出地址所占总单元格大小
    address_merge_range = "A{}:B{}".format(section+1,section+header_count)
    worksheet.merge_range(address_merge_range,address,merge_format)  #需要计算出来,根据传入分区数量

    # 通过计算得到磁盘路径所对应到表中的位置
    merge_format2 = workbook.add_format(
        {'bold': True,'align': 'center'})

    index_range = "C{}".format(section+1)
    worksheet.write_column(index_range,data[1],merge_format2)
    index_range = "C{}:C{}".format(section+1,section+1)
    worksheet.set_column(index_range,30)

    # 计算出总容量对应到表中的位置
    merge_format3 = workbook.add_format(
        {'bold': True,'align': 'center'})

    index_range = "D{}".format(section + 1)
    worksheet.write_column(index_range,data[2],merge_format3)

    index_range = "D{}:D{}".format(section + 1,section + 1)
    worksheet.set_column(index_range,20)

    # 计算出剩余容量对应到表中的位置
    merge_format4 = workbook.add_format(
        {'bold': True,'align': 'center'})
    index_range = "E{}".format(section + 1)
    worksheet.write_column(index_range,data[3],merge_format4)
    index_range = "E{}:E{}".format(section + 1,20)

    # 计算出利用率对应到表中的位置
    merge_format5 = workbook.add_format(
        {'bold': True,'align': 'center'})

    index_range = "F{}".format(section + 1)
    worksheet.write_column(index_range,data[4],merge_format5)
    index_range = "F{}:F{}".format(section + 1,20)

    # 返回计算后的表格的下两个单元的实际偏移位置
    return section + header_count + 3

if __name__ == "__main__":
    val = \
    [
        ["IP地址","磁盘路径","利用率"],["/etc/system/winsss/aaa","/abc/lyshark"],["1024GG","1111GB"],"22GB"],"33%"]
    ]

    ref = CreateDiskTable("192.168.1.1",val,8)
    print(ref)
    ref = CreateDiskTable("192.168.1.1",ref)
    CreateDiskTable("192.168.1.1",ref)
    workbook.close()

继续更新一下

import xlsxwriter
import json,os,sys,math
import argparse
import paramiko

workbook = xlsxwriter.Workbook('disk.xlsx')
worksheet = workbook.add_worksheet("系统磁盘统计")

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def BatchCMD(address,username,password,port,command):
    try:
        ssh.connect(hostname=address,username=username,password=password,port=port,timeout=2)
        stdin,stdout,stderr = ssh.exec_command(command)
        result = stdout.read()
        if len(result) != 0:
            result = str(result).replace("\\n","\n")
            result = result.replace("b'","").replace("'","")
            return result
        else:
            return None
    except Exception:
        return None

def GetAllDiskSpace(address,port):
    ref = []
    cmd_dict = {"Linux\n" : "df | grep -v 'Filesystem' | awk '{print $6 \":\" $3 \":\" $4 \":\" $5}'","AIX\n" : "df | grep -v 'Filesystem' | awk '{print $4 \":\" $7}'"
                }
    os_version = BatchCMD(address,"uname")
    for version,run_cmd in cmd_dict.items():
        if(version == os_version):
            os_ref = BatchCMD(address,run_cmd)
            ref_list= os_ref.split("\n")
            for each in ref_list:
                if each != "":
                    ref_list = []
                    ref_list = str(each.split(":"))
                    ref.append(eval(ref_list))
    return ref

def CreateDiskTable(address,20)

    # 返回计算后的表格的下两个单元的实际偏移位置
    return section + header_count + 3

if __name__ == "__main__":

    '''
    val = \
    [
        ["IP地址","33%"]
    ]
    ref = CreateDiskTable("192.168.1.1",3)
    ref = CreateDiskTable("192.168.1.2",ref)
    CreateDiskTable("192.168.1.3",ref)
    '''

    ref = GetAllDiskSpace("192.168.191.4","root","1233",22)

    # 恒矩阵转树矩阵
    ref_xor = list ( map(list,zip(*ref)) )

    header = ["IP地址","已使用","利用率"]

    ref_xor.insert(0,header)
    print(ref_xor)

    CreateDiskTable("192.168.191.4",ref_xor,2)
    workbook.close()

增加SSH功能遵循调用规范:

import xlsxwriter
import paramiko
import os,datetime

disk_name = "disk_" + str(datetime.datetime.now()).split(" ")[0] + ".xlsx"

workbook = xlsxwriter.Workbook(disk_name)
worksheet = workbook.add_worksheet("系统磁盘统计")

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 封装远程命令执行
def BatchCMD(address,"")
            return result
        else:
            return None
    except Exception:
        return None

# 获取磁盘数据
def GetAllDiskSpace(address,"AIX\n" : "df | grep -v 'Filesystem' | awk '{print $7 \":\" $5 \":\" $3 \":\" $4}'"
                }
    os_version = BatchCMD(address,run_cmd)
            ref_list= os_ref.split("\n")
            for each in ref_list:
                if each != "":
                    ref_list = str(each.split(":"))
                    ref.append(eval(ref_list))
    return ref

# 封装的绘制主机表格方法
def CreateDiskTable(address,"巡检IP地址",'fg_color': '#D7E4BC'})

    index_range = "C{}".format(section+1)
    worksheet.write_column(index_range,20)

    # 返回计算后的表格的下两个单元的实际偏移位置
    return section + header_count + 3

if __name__ == "__main__":
    with open("./unix_disk.db","r") as fp:
        fp_file = fp.readlines()

        ref_index = 2
        for each in fp_file:
            data = eval(each)
            ref = GetAllDiskSpace(data[0],22)
            try:
                print("[+] 正在绘制 {} 表格数据,这是一台: {} 主机".format(data[0],data[1]))
                # 恒矩阵转树矩阵
                ref_xor = list(map(list,zip(*ref)))
                header = ["IP地址","利用率"]

                # 将表头追加到矩阵头部
                ref_xor.insert(0,header)

                # 绘制表格,ref_index 递归自身,每次定位到下一个需要更新的表
                ref_index = CreateDiskTable(data[0],ref_index)
            except Exception:
                pass
    workbook.close()


绘制内存统计图(柱状图)

简单的案例: 主要统计前十计数信息,先远程拉取数据,然后内部矩阵排序,关联柱状图前十个元素,即可。

import xlsxwriter

workbook = xlsxwriter.Workbook("xxx.xlsx")
worksheet = workbook.add_worksheet()

headings = ["主机地址","CPU利用率","内存利用率","交换分区"]
data = [["192.168.1.100",88,36,66],["192.168.1.200",98,89,["192.168.1.220",100,32]]

# 循环添加模拟数据
for i in range(1,100):
    s = ["192.168.1.{}".format(i),i,i]
    data.append(s)

# 定义表格样式
head_style = workbook.add_format({"bold": True,"align": "center","font": 13})

# 逐条写入数据
worksheet.write_row("A1",headings,head_style)
for i in range(0,len(data)):
    worksheet.write_row("A{}".format(i + 2),data[i])

# 添加柱状图
chart = workbook.add_chart({"type": "column"})
chart.add_series({
    "name": "=Sheet1!$B$1",# 图例项
    "categories": "=Sheet1!$A$2:$A$10",# X轴 Item名称
    "values": "=Sheet1!$B$2:$B$10"       # X轴Item值
})
chart.add_series({
    "name": "=Sheet1!$C$1","categories": "=Sheet1!$A$2:$A$10","values": "=Sheet1!$C$2:$C$10"
})
chart.add_series({
    "name": "=Sheet1!$D$1","values": "=Sheet1!$D$2:$D$10"
})

# 添加柱状图标题
chart.set_title({"name": "性能统计柱状图"})
chart.set_style(12)

# 在G2处绘制
worksheet.insert_chart("G2",chart)
workbook.close()

先来获取到CPU数据: 通过SSH拉取CPU数据,然后按照最后一个值进行排序,由大到小以此放入二维数组中。

import xlsxwriter
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

def BatchCMD(address,"")
            return result
        else:
            return None
    except Exception:
        return None

def GetMemLoad(address,port):
    ref = []
    cmd_dict = {"Linux\n" : "free | grep \"Mem\" | awk '{print $2 \":\" $4}'","AIX\n" : "svmon | grep \"memory\" | awk '{print $2 \":\" $4}'"
                }
    # aix 总大小、剩余大小 需要x4
    os_version = BatchCMD(address,run_cmd)
            ref_list= os_ref.split("\n")
            for each in ref_list:
                if each != "":
                    print(each)
    return ref

def GetCPULoad(address,port):
    ref = []
    # 用户占用,系统占用,空闲
    cmd_dict = {"Linux\n" : "vmstat | tail -n 1 | awk '{print $13 \":\" $14 \":\" $15}'","AIX\n" : "vmstat | tail -n 1 | awk '{print $14 \":\" $15 \":\" $16}'"
                }
    os_version = BatchCMD(address,run_cmd)
            ref_list= os_ref.split("\n")
            for each in ref_list:
                if each != "":
                    ref = each.split(":")
            ref[2] = str(100 - int(ref[2]))
            ref.insert(0,address)
    return ref


# 排序函数,以第三列为条件排列
def takeSecond(elem):
    return int(elem[3])


if __name__ == "__main__":
    workbook = xlsxwriter.Workbook("test1111.xlsx")
    worksheet = workbook.add_worksheet()

    # 设置头部数据
    headings = ["主机地址","CPU内核态","CPU用户态","总利用率"]
    head_style = workbook.add_format({"bold": True,"fg_color":"#D7E4BC"})
    worksheet.write_row("A1",head_style)

    # 设置头部列宽
    worksheet.set_column("A1:D1",15)

# 统计数据并排序
    cpu_data = []
    with open("./unix_disk.db","r") as fp:
        fp_file = fp.readlines()
        for each in fp_file:
            try:
                data = eval(each)
                ref = GetCPULoad(data[0],22)

                if(len(ref) !=0):
                    cpu_data.append(ref)
                else:
                    continue
            except Exception:
                pass

    # 排序,统计第三列数据,将最大的放在最前面,以此向下
    cpu_data.sort(key=takeSecond,reverse=True)
    print(cpu_data)

    for i in range(0,len(cpu_data)):
        worksheet.write_row("A{}".format(i + 2),cpu_data[i])
    workbook.close()

将绘图方法与SSH结合: 运行后即可统计出机器的所有CPU数据,并将排名前十的机器使用情况列出来。

import xlsxwriter
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

workbook = xlsxwriter.Workbook("test333.xlsx")
worksheet = workbook.add_worksheet()

def BatchCMD(address,"")
            return result
        else:
            return None
    except Exception:
        return None

def GetCPULoad(address,address)

    ref[1] = int(ref[1])
    ref[2] = int(ref[2])
    ref[3] = int(ref[3])
    return ref


# 排序函数,以第三列为条件排列
def takeSecond(elem):
    return int(elem[3])

# 添加柱状统计图
def AddGraphical():
    # 添加柱状图
    chart = workbook.add_chart({"type": "column"})
    chart.add_series({
        "name": "=Sheet1!$B$1",# 图例项(也就是CPU内核态)
        "categories": "=Sheet1!$A$2:$A$10",# X轴 Item名称
        "values": "=Sheet1!$B$2:$B$10"  # X轴Item值
    })
    chart.add_series({
        "name": "=Sheet1!$C$1","values": "=Sheet1!$C$2:$C$10"
    })
    chart.add_series({
        "name": "=Sheet1!$D$1","values": "=Sheet1!$D$2:$D$10"
    })

    # 添加柱状图标题
    chart.set_title({"name": "CPU 性能统计柱状图"})
    # chart.set_style(8)

    chart.set_x_axis({
        'major_gridlines': {
            'visible': True,'line': {'width': 1.25,'dash_type': 'dash'}
        },})

    chart.set_size({'width': 900,'height': 500})
    chart.set_legend({'position': 'top'})
    chart.set_table({'show_keys': True})

    # 在F2处绘制
    worksheet.insert_chart("F2",chart)

if __name__ == "__main__":
    # 设置头部数据
    headings = ["主机地址",22)
                if(len(ref) !=0):
                    print(ref)
                    cpu_data.append(ref)
                else:
                    continue
            except Exception:
                pass

    # 排序,reverse=True)
    print(cpu_data)

    # 将数据批量添加到表格中
    for i in range(0,cpu_data[i])

    # 开始绘图
    AddGraphical()
    workbook.close()


收集主机负载(条形图)

制作Excel绘图:

import xlsxwriter

workbook = xlsxwriter.Workbook("xxx.xlsx")
worksheet = workbook.add_worksheet()

headings = ["获取时间","1分钟负载","5分钟负载","15分钟负载"]
data = [["12:01",0.05,0.7,0.006],["12:02",0.5,0.08,0.06],["12:03",1,2.1]]

# 定义表格样式
head_style = workbook.add_format({"bold": True,"fg_color":"#D7E4BC"})
worksheet.set_column("A1:D1",15)

# 逐条写入数据
worksheet.write_row("A1",data[i])

# 添加条形图,显示前十个元素
chart = workbook.add_chart({"type": "line"})
chart.add_series({
    "name": "=Sheet1!$B$1","values": "=Sheet1!$D$2:$D$10"
})

# 添加柱状图标题
chart.set_title({"name": "负载统计条形图"})
# chart.set_style(8)

chart.set_size({'width': 1000,'height': 500})
chart.set_legend({'position': 'top'})

# 在F2处绘制
worksheet.insert_chart("F2",chart)
workbook.close()

封装SSH执行模块: 封装上方的绘图模块,与SSH模块实现图形绘制,收集十分钟负载。

import xlsxwriter
import paramiko
import datetime
import time

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

workbook = xlsxwriter.Workbook("load_avg.xlsx")
worksheet = workbook.add_worksheet()

def BatchCMD(address,"")
            return result
        else:
            return None
    except Exception:
        return None

def GetCPUAvg(address,port):
    ref = []
    cmd_dict = {"Linux\n" : "cat /proc/loadavg | awk '{print $1 \":\" $2 \":\" $3}'",run_cmd)
            ref_list= os_ref.split("\n")
            for each in ref_list:
                if each != "":
                    ref = each.split(":")

    str_to_date = datetime.datetime.now()
    now_date = str(str_to_date.minute) + ":" + str(str_to_date.second)
    ref.insert(0,now_date)
    ref[1] = float(ref[1])
    ref[2] = float(ref[2])
    ref[3] = float(ref[3])
    return ref

# 绘制聚合图形
def AddGraphical(data):
    #data = [["12:01",2.1]]

    # 定义表格样式
    head_style = workbook.add_format({"bold": True,"fg_color": "#D7E4BC"})
    worksheet.set_column("A1:D1",15)

    # 逐条写入数据
    headings = ["获取时间","15分钟负载"]
    worksheet.write_row("A1",head_style)
    for i in range(0,len(data)):
        worksheet.write_row("A{}".format(i + 2),data[i])

    # 添加条形图,显示前十个元素
    chart = workbook.add_chart({"type": "line"})
    chart.add_series({
        "name": "=Sheet1!$B$1",# 图例项
        "categories": "=Sheet1!$A$2:$A$10",# 第一个线条(图例)
        "categories": "=Sheet1!$A$2:$A$10",# 第二个线条(图例)
        "categories": "=Sheet1!$A$2:$A$10","values": "=Sheet1!$D$2:$D$10"
    })

    # 添加柱状图标题
    chart.set_title({"name": "负载统计条形图"})
    # chart.set_style(8)

    chart.set_size({'width': 900,'height': 500})
    chart.set_legend({'position': 'top'})

    # 在F2处绘制
    worksheet.insert_chart("F2",chart)

# 收集10分钟的负载数据
def GetLoad():
    ref_date = []
    for item in range(10):
        ret = GetCPUAvg("192.168.1.11","123123","22")
        ref_date.append(ret)
        time.sleep(60)
        print(ret)
    return ref_date

if __name__ == "__main__":
    date = []
    date = GetLoad()
    AddGraphical(date)
    workbook.close()


绘制设备种类(饼状图)

制作Excel绘图: 先来实现绘图。

import xlsxwriter

workbook = xlsxwriter.Workbook("pie.xlsx")
worksheet = workbook.add_worksheet()

data = [["Suse",30 ],["Centos",25],["AIX",15]]

# 定义表格样式
head_style = workbook.add_format({"bold": True,15)

# 逐条写入数据
headings = ["系统版本","数量"]
worksheet.write_row("A1",data[i])

# 添加条形图,显示前十个元素
chart = workbook.add_chart({"type": "pie"})
chart.add_series({
    "name": "=Sheet1!$B$1",# 图例项
    "categories": "=Sheet1!$A$2:$A$4",# X轴 Item名称
    "values": "=Sheet1!$B$2:$B$4"       # X轴Item值
})

# 添加饼状图
chart.set_title({"name": "系统版本分布"})
chart.set_size({'width': 600,'height': 300})
chart.set_legend({'position': 'right'})

# 在D2处绘制
worksheet.insert_chart("D2",chart)
workbook.close()

实现收集数据并绘图: 收集数据就不写了,主要说说统计个数,我们可以每次收集到数据后放入一个列表中,最后使用set集合将其自动去重,去重后在对特定的值进行计数统计即可。

data = ["Windows 10","Windows 10","Windows 7","Suse","AIX","AIX"]
dic = {}

for each in set(data):
    dic[each] = data.count(each)

print(dic)

继续实现绘图即可。

import xlsxwriter

workbook = xlsxwriter.Workbook("pie.xlsx")
worksheet = workbook.add_worksheet()

# 去重后的数据在dic
data = ["Windows 10","AIX"]
dic = {}

for each in set(data):
    dic[each] = data.count(each)
print("构建字典: {}".format(dic))
print("字典数: {}".format(len(dic)))


# 字典转列表
new_data = []
for k,v in dic.items():
    new_list = [k,v]
    new_data.append(new_list)
print("字典转为列表:{}".format(new_data))

#data = [["Suse",len(new_data)):
    worksheet.write_row("A{}".format(i + 2),new_data[i])

# 添加饼状图图例
chart = workbook.add_chart({"type": "pie"})
chart.add_series({
    "name": "=Sheet1!$B$1",# 图例项
    "categories": "=Sheet1!$A$2:$A${}".format(len(dic)+1),# X轴 Item名称
    "values": "=Sheet1!$B$2:$B${}".format(len(dic)+1)       # X轴Item值
})

# 添加饼状图
chart.set_title({"name": "系统版本分布"})
chart.set_size({'width': 600,chart)
workbook.close()

原文地址:https://www.cnblogs.com/LyShark

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Python中的函数(二) 在上一篇文章中提到了Python中函数的定义和使用,在这篇文章里我们来讨论下关于函数的一些更深的话题。在学习C语言函数的时候,遇到的问题主要有形参实参的区别、参数的传递和改变、变量的作用域。同样在Python中,关于对函数的理解和使用也存在这些问题。下面来逐一讲解。一.函
Python中的字符串 可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以"Hello world"这个程序作为入门程序,这个程序中要打印的"Hello world"就是字符串。如果你做过自然语言处理方面的研究,并且用Python
Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。 类是对现实世界中一些事物的封装,
Python面向对象编程(二) 在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装。下面就来了解一下另外两大特征:继承和多态。 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的类称为父类或者超类、也可以称作基类,继承的类称为子类。并且Pytho
Python中的函数(一) 接触过C语言的朋友对函数这个词肯定非常熟悉,无论在哪门编程语言当中,函数(当然在某些语言里称作方法,意义是相同的)都扮演着至关重要的角色。今天就来了解一下Python中的函数用法。一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明
在windows下如何快速搭建web.py开发框架 用Python进行web开发的话有很多框架供选择,比如最出名的Django,tornado等,除了这些框架之外,有一个轻量级的框架使用起来也是非常方便和顺手,就是web.py。它由一名黑客所创建,但是不幸的是这位创建者于2013年自杀了。据说现在由
将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2这款编辑器,然后这段时间就试了一下,就深深地喜欢上这款编辑器了...
Python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的。那么在Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中
Python的基础语法 在对Python有了基础的认识之后,下面来了解一下Python的基础语法,看看它和C语言、java之间的基础语法差异。一.变量、表达式和语句 Python中的语句也称作命令,比如print "hello python"这就是一条语句。 表达式,顾名思义,是
Eclipse+PyDevʽjango+Mysql搭建Python web开发环境 Python的web框架有很多,目前主流的有Django、Tornado、Web.py等,最流行的要属Django了,也是被大家最看好的框架之一。下面就来讲讲如何搭建Django的开发环境。一.准备工作 需要下载的
在windows下安装配置Ulipad 今天推荐一款轻便的文本编辑器Ulipad,用来写一些小的Python脚本非常方便。 Ulipad下载地址: https://github.com/limodou/ulipad http://files.cnblogs.com/dolphin0520/u...
Python中的函数(三) 在前面两篇文章中已经探讨了函数的一些相关用法,下面一起来了解一下函数参数类型的问题。在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格进行规定的。然而在Python中函数参数定义和传递的方式相比而言就灵活多了。一.函数参数的
在Notepad++中搭配Python开发环境 Python在最近几年一度成为最流行的语言之一,不仅仅是因为它简洁明了,更在于它的功能之强大。它不仅能够完成一般脚本语言所能做的事情,还能很方便快捷地进行大规模的项目开发。在学习Python之前我们来看一下Python的历史由来,"Pytho
Python中的条件选择和循环语句 同C语言、Java一样,Python中也存在条件选择和循环语句,其风格和C语言、java的很类似,但是在写法和用法上还是有一些区别。今天就让我们一起来了解一下。一.条件选择语句 Python中条件选择语句的关键字为:if 、elif 、else这三个。其基本形式如
关于raw_input( )和sys.stdin.readline( )的区别 之前一直认为用raw_input( )和sys.stdin.readline( )来获取输入的效果完全相同,但是最近在写程序时有类似这样一段代码:import sysline = sys.stdin.readline()
初识Python 跟学习所有的编程语言一样,首先得了解这门语言的编程风格和最基础的语法。下面就让我们一起来了解一下Python的编程风格。1.逻辑行与物理行 在Python中有逻辑行和物理行这个概念,物理行是指在编辑器中实际看到的一行,逻辑行是指一条Python语句。在Python中提倡一个物理行只
当我们的代码是有访问网络相关的操作时,比如http请求或者访问远程数据库,经常可能会发生一些错误,有些错误可能重新去发送请求就会成功,本文分析常见可能需要重试的场景,并最后给出python代码实现。
1.经典迭代器 2.将Sentence中的__iter__改成生成器函数 改成生成器后用法不变,但更加简洁。 3.惰性实现 当列表比较大,占内存较大时,我们可以采用惰性实现,每次只读取一个元素到内存。 或者使用更简洁的生成器表达式 4.yield from itertools模块含有大量生成器函数可
本文介绍简单介绍socket的常用函数,并以python-kafka中的源码socketpair为例,来讲解python socket的运用
python实践中经常出现编码相关的异常,大多网上找资料而没有理解原理,导致一次次重复错误。本文对常用Unicode、UTF-8、GB2312编码的原理进行介绍,接着介绍了python字符类型unicode和str以及常见编解码错误UnicodeEncodeError和UnicodeDEcodeEr