zoukankan      html  css  js  c++  java
  • Pyhton模块学习

    rrdtool:

    rrdtool
    可直接用pip install python-rrdtool

    import rrdtool

    创建:
    create(...)
    create(args..): Set up a new Round Robin Database
    create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CF:xff:steps:rows]
    filename:是rrd的文件名,可以以rrd结尾。
    --step:rrdtool期望每隔多长事件收到一个值,默认是5分钟。
    --start:rrdtool第一个记录的起始时间,rrdtool不会接收任何数据的时间小于起始时间。例如你在update时给出的时间小于起始时间,则rrdtool会拒绝该值
    DS:DS用于定义数据源,是用来存放结果的变量名。该变量名在画图时会用到。
    DST:用来设置数据源的类型,有COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE等5种类型。
    COUNTER:数值必须是递增的
    DERIVE:和COUNTER类似,不过数据可递增可递减
    ABSOLUTE:他每次假定前一个时间间隔的值是0,然后计算平均值
    GAUGE:不做任何变化,直接存入rra中
    COMPUTE:他不接收具体值,而是定义一个表达式,然后算出某个值
    heartbeat:
    min:
    max:
    RRA:rra指定数据如何存放,他可以保存不同时间间隔的数据。力图每5分钟产生一条数据,这样一小时就是12条,如果每30分钟一条数据,这样一小时就是两条数据,这样一天,一年下来会有很多条数据,但是rrd数据库的大小是固定的,所以就有一个合并数据的方式了。这就是rra的功能。合并方式由CF指定。
    CF:CF就是用来设置数据合并的功能,有AVERAGE、MAX、MIN、LAST等4种类型,分别表示对PDP取平均、最大、最小、当前值。
    xff:xff字段设置一个比例值,rrdtool会把多个PDP合并为一个CDP,如果这写PDP中有值为UNKNOW的PDP,那么CDP的值该怎么计算,xff就是设置一个比例,当PDP中UNKNOW的比例超过多少是,就无法合成正常的CPD,合成的CPD值也为UNKNOW。
    steps:表示多少个PDP合成一个CDP
    rows:表示总共存多少个CDP?也就是可以保存多少数据?
    PDP:在每个规定的时间间隔内rrdtool都会收到一个值,rrdtool在收到该值后,根据DST的设置,会计算出另一个值,这个值就是PDP。
    CDP:rrdtool使用多个PDP合并出一个CDP,也就是执行CF的后果,然后把这个CDP的值存入rra中。



    查看第一次/最后一次数据更新时间:

    first(...)
    first(filename): Return the timestamp of the first data sample in an RRD
    last(...)
    last(filename): Return the timestamp of the last data sample in an RRD

    查看rrd结构信息:
    info(...)
    info(filename): extract header information from an rrd
    取出rrd的值:
    fetch(...)
    fetch(args..): fetch data from an rrd.
    fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]
    filename:要取出数据的rrd文件
    --start:可选,默认是end-1day
    --end:可选,默认是now
    CF:AVERAGE、MAX、MIN、LAST。前提是你的rrd中有该类型的rra才可以。

    更新rrd数据:
    update(...)
    update(args..): Store a new set of values into the rrd
    update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] [timestamp:value[:value...] ...]
    filename:要更新的rrd文件
    --template:
    -t ds-name[:ds-name]:设置更新那个DS的数据
    N|timestamp:时间戳,表示数据在哪个时间点采集的,N表示now。
    value[:value...]:一个rrd文件可以有多个DS,所以一次update可以更新多个value。
    update插入值后,并不会有返回,无法知道插入是否正常,可以用updatev
    带返回值的插入:
    updatev(...)
    updatev is called in the same manner as update
    和update类似,不过每次插入后会返回一个状态码。

    画图:
    graph(...)
    graph(args..): Create a graph based on data from one or several RRD
    graph filename [-s|--start seconds] [-e|--end seconds] [-x|--x-grid x-axis grid and label] [-y|--y-grid y-axis grid and label] [--alt-y-grid] [--alt-y-mrtg] [--alt-autoscale] [--alt-autoscale-max] [--units-exponent] value [-v|--vertical-label text] [-w|--width pixels] [-h|--height pixels] [-i|--interlaced] [-f|--imginfo formatstring] [-a|--imgformat GIF|PNG|GD] [-B|--background value] [-O|--overlay value] [-U|--unit value] [-z|--lazy] [-o|--logarithmic] [-u|--upper-limit value] [-l|--lower-limit value] [-g|--no-legend] [-r|--rigid] [--step value] [-b|--base value] [-c|--color COLORTAG#rrggbb] [-t|--title title] [DEF:vname=rrd:ds-name:CF] [CDEF:vname=rpn-expression] [PRINT:vname:CF:format] [GPRINT:vname:CF:format] [COMMENT:text] [HRULE:value#rrggbb[:legend]] [VRULE:time#rrggbb[:legend]] [LINE{1|2|3}:vname[#rrggbb[:legend]]] [AREA:vname[#rrggbb[:legend]]] [STACK:vname[#rrggbb[:legend]]]
    filename:图片的名称,默认是PNG格式
    --start:图片X轴数据的起始时间
    --end:图片X轴数据的结束时间
    --x-grid x-axis grid and label:
    --y-grid y-axis grid and label:
    --alt-y-grid
    --alt-y-mrtg
    --alt-autoscale
    --alt-autoscale-max
    --units-exponent
    --vertical-label text Y轴的文字说明
    --width pixels X轴的大小
    --height pixels Y轴的大小
    --interlaced
    --imginfo formatstring
    --imgformat GIF|PNG|GD 图片格式
    --background value
    --overlay value
    --unit value
    --lazy
    --logarithmic
    --upper-limit value Y轴数据值的上限,默认会自动调整Y轴的数字
    --lower-limit value Y轴数据值的下限
    --no-legend 取消图表下方的图例
    --rigid 严格按照upper-limit/lower-limit来绘制
    --step value
    --base value 默认1K=1000 可以调整1K=1024
    --color COLORTAG#rrggbb
    --title title 图表上方的标题
    DEF:vname=rrd:ds-name:CF 定义绘图用的数据源,也就是从那个RRD中取数据,因为RRA有多种类型,所以需要指定CF
    CDEF:vname=rpn-expression 定义合并值,
    PRINT:vname:CF:format
    GPRINT:vname:CF:format 在图表的下方输出最大值、最小值之类
    COMMENT:text 用来输出一些字符串
    HRULE:value#rrggbb 在图表上绘制水平线
    VRULE:time#rrggbb 在图表上绘制垂直线
    LINE{1|2|3}:vname 使用线条来绘制vname的数据图
    AREA:vname 使用方块来绘制vname的数据图
    STACK:vname

    -------------------------------------------------------------------------

    模块之psutil操作

    psutil
    可直接用pip install psutil


    psutil.cpu_times() #显示cpu的整个信息

    获取单项值
    psutil.cpu_times() .user #如果要只但看那个的话就在后边加上.xxx就行了

    获取cpu的逻辑个数
    psutil.cpu_count()
    获取cpu的物理个数
    psutil.cpu_count( logical=False )
    读取内存信息
    linux系统内存利用率信息涉及to-tal(内存总数),used(以使用内存),free(空闲内存),buffers(缓冲使用数)
    cache(缓存使用数),swap(交换分区使用数),分别使用psutil.virtual_memory()与psuti.swap_memory()方法获取
    import psutil
    mem = psutil.virtual_memory() #获取内存的完整信息
    mem.total #获取内存总数
    mem.free #获取空闲的内存信息
    获取swap分区信息
    psutil.swap_memory()
    读取磁盘参数
    磁盘利用率使用psutil.disk_usage方法获取,磁盘IO信息包括read_count(读IO数),write_count(写IO数)
    read_bytes(IO写字节数),read_time(磁盘读时间),write_time(磁盘写时间),这些IO信息用psutil.disk_io_counters()
    获取磁盘的完整信息
    psutil.disk_partitions()
    获取分区表的参数
    psutil.disk_usage('/') #获取/分区的状态
    获取硬盘IO总个数
    psutil.disk_io_counters()
    获取单个分区IO个数
    psutil.disk_io_counters(perdisk=True) #perdisk=True参数获取单个分区IO个数
    读取网络信息
    网络信息与磁盘IO信息类似,涉及到几个关键点,包括byes_sent(发送字节数),byte_recv=xxx(接受字节数),
    pack-ets_sent=xxx(发送字节数),pack-ets_recv=xxx(接收数据包数),这些网络信息用psutil.net_io_counters()
    psutil.net_io_counters() #获取网络总IO信息
    psutil.net_io_counters(pernic=True) #pernic=True输出网络每个接口信息--------------------------------------每个接口信息
    获取当前系统用户登录信息
    psutil.users()
    获取开机时间
    import psutil, datetime
    psutil.boot_time() #以linux时间格式返回
    datetime.datetime.fromtimestamp(psutil.boot_time ()).strftime("%Y-%m-%d %H: %M: %S") #转换成自然时间格式

    系统进程管理
    获取当前系统的进程信息,获取当前英语程序的运行状态,包括进程的启动时间,查看设置CPU亲和度,内存使用率,IO信息
    socket连接,线程数等
    获取进程信息
    psutil模块在获取进程方面有很好的支持,使用psutil.pids()方法获取所有进程的PID,
    使用psutil.Process()方法获取单个进程的名称,路径状态等
    查看系统全部进程
    psutil.pids()
    查看单个进程
    p = psutil.Process(2423)
    p.name() #进程名
    p.exe() #进程的bin路径
    p.cwd() #进程的工作目录绝对路径
    p.status() #进程状态
    p.create_time() #进程创建时间
    p.uids() #进程uid信息
    p.gids() #进程的gid信息
    p.cpu_times() #进程的cpu时间信息,包括user,system两个cpu信息
    p.cpu_affinity() #get进程cpu亲和度,如果要设置cpu亲和度,将cpu号作为参考就好
    p.memory_percent() #进程内存利用率
    p.memory_info() #进程内存rss,vms信息
    p.io_counters() #进程的IO信息,包括读写IO数字及参数
    p.connectios() #返回进程列表
    p.num_threads() #进程开启的线程数
    听过psutil的Popen方法启动应用程序,可以跟踪程序的相关信息
    from subprocess import PIPE
    p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"],stdout=PIPE)
    p.name()
    p.username()

    ----------------------------------------------------------------------

    模块之_pymysql操作

    格式:
    conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable",charset="utf8")

    比较常用的参数包括
    1.host:数据库主机名.默认是用本地主机.
    2.user:数据库登陆名.默认是当前用户.
    3.passwd:数据库登陆的秘密.默认为空.
    4.db:要使用的数据库名.没有默认值.
    5.port:MySQL服务使用的TCP端口.默认是3306.
    6.charset:数据库编码.


    然后,这个连接对象也提供了对事务操作的支持,标准的方法
    commit() 提交
    rollback() 回滚

     

    3.执行sql语句和接收返回值

    cursor=conn.cursor()

    n=cursor.execute(sql,param)

    首先,我们用使用连接对象获得一个cursor对象,接下来,我们会使用cursor提供的方法来进行工作.这些方法包括两大类:1.执行命令,2.接收返回值

     

    cursor用来执行命令的方法:

    callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
    execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
    executemany(self, query, args):执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
    nextset(self):移动到下一个结果集


    cursor用来接收返回值的方法:

    fetchall(self):接收全部的返回结果行.
    fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
    fetchone(self):返回一条结果行.
    scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.

     

     

     

    #再来执行一个查询的操作

    cursor.execute("select * from cdinfo")

    #我们使用了fetchall这个方法.这样,cds里保存的将会是查询返回的全部结果.每条结果都是一个tuple类型的数据,这些tuple组成了一个tuple

    cds=cursor.fetchall()

    #因为是tuple,所以可以这样使用结果集

    print cds[0][3]

    #或者直接显示出来,看看结果集的真实样子

    print cds

     

    #如果需要批量的插入数据,就这样做

    sql="insert into cdinfo values(0,%s,%s,%s,%s,%s)"

    #每个值的集合为一个tuple,整个参数集组成一个tuple,或者list

    param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))

    #使用executemany方法来批量的插入数据.这真是一个很酷的方法!

    n=cursor.executemany(sql,param)

     

    4.关闭数据库连接

    需要分别的关闭指针对象和连接对象.他们有名字相同的方法

    cursor.close()

    conn.close()

     

    ------------------------------------

    连接时可设置编码,以便显示中文:
    >>> conn = pymysql.connect('127.0.0.1','root','111111','mytest',charset ='utf8')

    游标
    >>> cur = conn.cursor()

    使用数据库
    >>> cur.execute('USE python')
    0

    执行插入数据,可按字段顺序写入数据
    >>> cur.execute("INSERT INTO users VALUES(1,'loutsx'),(2,'小张')")
    可以这样操作:
    cur.execute("INSERT INTO users(id,name) VALUES(3,'中国')")

    如果插入的数据有中文,执行脚本会的告警提示,可在创建表的时候设置编码为utf8
    Warning (from warnings module):
    File "C:Python34libsite-packagespymysqlcursors.py", line 161
    result = self._query(query)
    Warning: Incorrect string value: 'xE5xA5xA5xE6x9Ex97...' for column '客户' at row 1


    以下是一个例子,读取Excel中的数据,并存储到mysql中:
    -----------------------------------------------------
    import xlrd
    import pymysql

    def get_xls():
    data = xlrd.open_workbook('s.xls')
    sheets = data.sheet_names()
    table = data.sheets()[0]
    rows = table.nrows
    conn = pymysql.connect('127.0.0.1','root','111111','mytest',charset='utf8')------------这里要设置编码为utf8
    cur = conn.cursor()
    cur.execute("DROP TABLE VRF")
    db = 'CREATE TABLE VRF(RD VARCHAR(255),VRF名称 VARCHAR(255),客户 VARCHAR(255)) charset ="utf8"'
    insert = "INSERT INTO VRF VALUES(%s,%s,%s)"
    cur.execute(db)
    for i in range(1,rows):
    line = table.row_values(i)
    print(line)
    cur.execute(insert,line)
    cur.close()
    conn.commit()
    conn.close()

    get_xls()
    print('ok')
    ------------------------------------------------------

    ------------------------------------
    下面的代码是一个完整的例子.

    #使用sql语句,这里要接收的参数都用%s占位符.要注意的是,无论你要插入的数据是什么类型,占位符永远都要用%s
    sql="insert into cdinfo values(%s,%s,%s,%s,%s)"
    #param应该为tuple或者list
    param=(title,singer,imgurl,url,alpha)
    #执行,如果成功,n的值为1
    n=cursor.execute(sql,param)
    ------------------------------------

    执行查询操作
    >>> cur.execute('select * from users')
    2

    >>> data = cur.fetchall()
    >>> data
    ((1, 'loutsx'), (2, '小张'))
    >>> for i in data:
    print(i)


    (1, 'loutsx')
    (2, '小张')

    关闭游标
    >>> cur.close()

    提交事务,不提交mysql中没有相关数据
    >>> conn.commit()

    关闭连接
    >>> conn.close()

     

    --------------------------------------------------------------------

    模块之_IP地址操作

    可直接通过pip下载IPy,或者在Python上下载后安装

    from IPy import *

    IPy.INT_TYPES IPy.IPV6_TEST_MAP IPy.MAX_IPV4_ADDRESS IPy.collections IPy.sys
    IPy.IP IPy.IPint IPy.MAX_IPV6_ADDRESS IPy.intToIp IPy.types
    IPy.IPSet IPy.IPv4ranges IPy.STR_TYPES IPy.parseAddress IPy.xrange
    IPy.IPV6_MAP_MASK IPy.IPv6ranges IPy.bisect IPy.py

    ips = IPy.IP('192.168.0.0/30')-------可用迭代的方式获取IP信息


    ips.NoPrefixForSingleIp
    ips.iptype() 检查是否公网IP地址
    ips.prefixlen() 检查掩码的长度
    ips.strFullsize() 得到IP的字符串方式
    ips.WantPrefixLen()
    ips.len()  获取IP地址数量,等同于len(ips)
    ips.reverseName() 获取目标IP的反射信息
    ips.strHex()
    ips.broadcast() 获取广播地址
    ips.make_net()
    ips.reverseNames() 获取所有IP的反向信息
    ips.strNetmask()   获取目标IP的掩码,字符串
    ips.get_mac()
    ips.net()
    ips.strBin()   获取目标IP的二进制方式,字符串
    ips.strNormal() 获取目标IP的信息,字符串,参数有0-3
    ips.int() 同 ips.ip ,同ips.strDec(),字符方式
    ips.netmask
    ips.strCompressed() 获取目标IP的信息,字符串,等同于ips.strNormal(1)
    ips.v46map
    ips.overlaps() 确认一个IP是否在另一段内
    ips.version

    -----------------------------------------------------------------------

    模块之_excel操作

    python Excel模块
    针对 03版excel(xls结尾的),我们可以使用xlrd读,xlwt包来写
    针对 07版excel(xlsx结尾的),我们可以使用openpyxl来操作读写excel

    xlrd,xlwt和xlutils是用Python处理Excel文档(*.xls)的高效率工具。
    其中,xlrd只能读取xls,xlwt只能新建xls(不可以修改)
    xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改


    可直接通过pip方式下载

    也可以直接下载:
    xlwt的下载地址https://pypi.python.org/pypi/xlwt3
    xlrd的下载地址https://pypi.python.org/pypi/xlrd3
    openpyx1的下载地址https://pypi.python.org/pypi/openpyxl


    #读取excel使用(支持03)
    import xlrd
    #写入excel使用(支持03)
    import xlwt3
    #读取execel使用(支持07)
    from openpyxl import Workbook
    #写入excel使用(支持07)
    from openpyxl import load_workbook

    ------属性和方法-----------------------
    xlrd
    Book(class) 由xlrd.open_work("example.xls")返回
    nsheets: sheets数
    sheet_names: sheet名称列表
    sheets: sheet列表
    sheet_by_index(sheetx): 按序号提取sheet
    sheet_by_name(sheet_name): 按名称提取sheet

    Sheet(class) 由Book object相关方法返回
    name:                         sheet名
    nrows: 行数
    ncols: 列数
    cell(rowx,colx): 第rows行colx列的单元格
    cell_type(rowx,colx): 数据类型
    cell_value(rows,colx): 数值
    col(colx): 第colx列所有单元格组成的列表
    col_slice(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格组成的列表
    col_types(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值类型组成的列表
    col_values(colx,start_rowx=0,end_rowx=None): 第colx列指定单元格数值组成的列表
    row同样有col的各项操作,此处略去

    Cell(class) 由Sheet object(s)相关方法返回
    ctype: 一个int型变量,对应不同的数值类型
    value: 单元格的值


    xlwt
    Workbook(class) 由xlwt.Workbook()返回
    encoding: 编码方案
    add_sheet(sheet_name): 添加sheet
    get_sheet(Sheet_name): 选择sheet
    save(file_name): 保存

    Worksheet(class) 由Workbook object相关方法返回
    write(rows,colx,cell_value,style): 编辑单元格
    row(rowx).write(colx,cell_value,style): 编辑行
    flush_row_data(): 减少内存压力,flush之前行不可再修改
    col(colx),write(rows,cell_value,style): 编辑列


    xlutils
    copy: 将xlrd.Book转为xlwt.Workbook
    styles: 读取xlrd.Workbook的每一个单元格的style
    display: 简单而安全地呈现xlrd读取的数据
    filter: 拆分与整合多个xls文件
    margins: 查看表格稀疏程度
    save: 序列化xlrd.Book,转存为binary xls或stream


    Tips
    1. xlrd.open_workbook(fomatting_info=):当formatting_info=Ture,读取workbook并保留格式
    2. xlrd.open_workbook(on_demand=): 当on_demand=True,只有被要求时才将worksheet载入内存,读取大文件时使用
    3. xlwt.Worksheet.flush_row_data(): 减少内存占用,被刷新的行不能再访问或修改,建议每1000行刷新一次(若列很多当调整)
    4. xlwt.Workbook(encoding=): 选择创建的workbook的编码




    <span style="font-family: 'courier new', courier;">
    import xlrd
    import xlwt
    from xlutils.copy import copy

    # xlrd
    book = xlrd.open_workbook("example.xls", formatting_info=True, on_demand=True)
    sheet = book.sheet_by_index(0)
    cell = sheet.cell(0,0)

    # xlwt
    workbook = xlwt.Workbook()
    workbook.encoding = "utf-8" # Equals to workbook = xlwt.Workbook(encoding="utf-8")
    sheet = workbook.add_sheet("Sheet1", cell_overwrite_ok=True)
    style = xlwt.easyxf(
    "font: name Arial;"
    "pattern: pattern solid, fore_colour red;"
    )
    sheet.write(0, 0, "content of this cell", style)
    sheet.row(0).set_style(style)
    workbook.save("example.xls")

    #xlutils
    workbook = copy(book)
    </span>


    *********************************************************
    ******** 2003版本的操作 ********
    *********************************************************


    打开一个表格
    data = xlrd.open_workbook(path)

    返回表格中的sheet名称,多个名称返回一个列表
    sheets=data.sheet_names()

    获取一个工作表
    ① table = data.sheets()[0] #通过索引顺序获取
    ② table = data.sheet_by_index(0) #通过索引顺序获取
    ③ table = data.sheet_by_name(u'Sheet1')#通过名称获取

    获取整行和整列的值(返回数组)
    复制代码 代码如下:
    table.row_values(i) ----返回行数的内容,i为行数索引,返回列表
    table.col_values(i) ----返回列数的内容,i为行数索引,返回列表

    获取行数和列数------这是属性,没有()
    table.nrows
    table.ncols

    获取单元格
    table.cell(0,0).value
    table.cell(2,3).value
    以上命令等同于:
    table.cell_value(0,0)

    使用行列索引
    cell_A1 = table.row(0)[0].value
    cell_A2 = table.col(1)[0].value

    >>> table.row(0)[1]--------不加Value得到一个完整的数据
    text:'IP Address'
    >>> table.row(0)[1].value
    'IP Address'
    >>> table.row(0)
    [text:'订单编号', text:'IP Address', text:'操作时间']

    ---------------------------------------------

    写入操作:

    打开一个表格,建议用ascii编码,不然可能会有一些诡异的现象。
    wb=xlwt3.Workbook(encoding = 'ascii')

    增加一个sheet
    sheet=wb.add_sheet("xlwt3数据测试表")

    写入数据table.write(行,列,value)
    table.write(0,0,'test')

    # 如果对一个单元格重复操作,会引发
    # returns error:
    # Exception: Attempt to overwrite cell:
    # sheetname=u'sheet 1' rowx=0 colx=0
    # 所以在打开时加cell_overwrite_ok=True解决

    table = file.add_sheet('sheet name',cell_overwrite_ok=True)

    保存到文件中
    wb.save(path)


    # 另外,使用style
    style = xlwt.XFStyle() # 初始化样式
    font = xlwt.Font() # 为样式创建字体
    font.name = 'Times New Roman'
    font.bold = True
    style.font = font #为样式设置字体
    table.write(0, 0, 'some bold Times text', style) # 使用样式

    -----实例----------------
    可以写入一个不存在的文件中,会自动创建一个文件
    >>> wb = xlwt.Workbook()
    >>> sheet = wb.add_sheet('另一个测试')
    >>> value = [['姓名','性别','身高','三围'],['张三','男','190','45'],['李四','男','160','95']]
    >>> for i in range(len(value)):
    for j in range(len(value[i])):
    sheet.write(i,j,value[i][j])
    wb.save('d:/2.xls')
    print('ok')

    ok
    ok
    ok
    >>>

     

    *********************************************************
    ******** 2007版本的操作 ********
    *********************************************************
    打开一个表格
    data1 = load_workbook(path)

    返回表格中的sheet名称,多个名称返回一个列表
    sheets = data1.get_sheet_names()

    获取一个工作表
    stable = data1.get_sheet_by_name('ddd')#通过名称获取


    row=ws.get_highest_row()
    col=ws.get_highest_column()
    print("列数: ",ws.get_highest_column())
    print("行数: ",ws.get_highest_row())

    for i in range(0,row):
    for j in range(0,col):
    print(ws.rows[i][j].value," ",end="")


    获取整行和整列的值(返回数组)
    复制代码 代码如下:
    table.row_values(i) ----返回行数的内容,i为行数索引,返回列表
    table.col_values(i) ----返回列数的内容,i为行数索引,返回列表

    获取行数和列数------这是属性,没有()
    table.nrows
    table.ncols

    获取单元格
    table.cell(0,0).value
    table.cell(2,3).value
    以上命令等同于:
    table.cell_value(0,0)

    ---------------------------------------------------------------------

    模块之_Mail操作

    import smtplib
    from email.mime.text import MIMEText

    sender = 'syother@163.com'
    passwd = '1qaz2wsx'
    receivers = ['loutsx@163.com']

    #连接服务器
    server = smtplib.SMTP('smtp.163.com',25)

    #登录认证
    server.login(sender,passwd)

    #邮件内容
    msg1 = '''
    hello loutsx:
    this is python test mail script,
    I try the script is sucesess!
    '''
    #这里plain是类型,可设置为html
    #格式:MIMEText(_text,_subtype='plain',_charset=None)
    msg = MIMEText(msg1,'plain','utf-8')
    #定义邮件头
    msg['From'] = 'syother<syother@163.com>'
    msg['To'] = u'loutsx <loutsx@163.com>'
    msg['Subject'] = u'python mail'
    #发送邮件,msg.as_string())这里将内容转换为字串
    server.sendmail('syother@163.com','loutsx@163.com',msg.as_string())

     

    '''
    ------------另一种方式---------------------------
    msg = MIMEText('asdasdf','plain','utf-8')
    msg['From'] = 'syother@163.com'
    msg ['To'] = 'loutsx@163.com'
    msg['Subject'] = u'测试Python'
    def mail():
    server = smtplib.SMTP('smtp.163.com',25)
    server.login('syother@163.com','1qaz2wsx')
    server.sendmail('syother@163.com','loutsx@163.com',msg.as_string())

    ------------------------------------------------------

    还可以发送HTML/IMG的邮件,发送带附件的邮件

     

    import smtplib
    from email.mime.text import MIMEText
    
    sender = 'syother@163.com'
    passwd = '1qaz2wsx'
    receivers = ['loutsx@163.com'] 
    
    #连接服务器
    server = smtplib.SMTP('smtp.163.com',25)
    
    #登录认证
    server.login(sender,passwd)
    
    #邮件内容
    msg1 = '''
    hello loutsx:
    this is python test mail script,
    I try the script is sucesess!
    '''
    #这里plain是类型,可设置为html
    #格式:MIMEText(_text,_subtype='plain',_charset=None)
    msg = MIMEText(msg1,'plain','utf-8')
    #定义邮件头
    msg['From'] = 'syother<syother@163.com>'
    msg['To'] = u'loutsx <loutsx@163.com>'
    msg['Subject'] = u'python mail'
    #发送邮件,msg.as_string())这里将内容转换为字串
    server.sendmail('syother@163.com','loutsx@163.com',msg.as_string())
    
    
    
    '''
    ------------另一种方式---------------------------
    msg = MIMEText('asdasdf','plain','utf-8')
    msg['From'] = 'syother@163.com'
    
    msg ['To'] = 'loutsx@163.com'
    msg['Subject'] = u'测试Python'
    def mail():
        server = smtplib.SMTP('smtp.163.com',25)
        server.login('syother@163.com','1qaz2wsx')
        server.sendmail('syother@163.com','loutsx@163.com',msg.as_string())
    
    ------------------------------------------------------
    

      

  • 相关阅读:
    java实现链队列
    java使用链栈实现迷宫求解
    java使用链栈实现数制转换
    java实现链栈
    java实现顺序栈
    java实现双向循环链表
    java实现循环链表
    java实现单链表
    java实现顺序链表
    Osmocom-BB中cell_log的多种使用姿势
  • 原文地址:https://www.cnblogs.com/syother/p/6773588.html
Copyright © 2011-2022 走看看