Python自动化开发从浅入深-语言基础(常用模块)

模块就是将一些相似功能的代码集中到一起,通过定义形象的模块名称,以便用户查找和使用。

通常模块分为三种:自定义模块,内置标准模块和开源模块。

自定义模块 和开源模块的使用参考 http://www.cnblogs.com/wupeiqi/articles/4963027.html 

python中的一些常用模块包括以下几个

一、time 和 datetime模块

  用于处理时间和日期的。

import time
import datetime

print(time.clock()) #返回处理器时间,3.3开始已废弃
print(time.process_time()) #返回处理器时间,3.3开始已废弃
print(time.time()) #返回当前系统时间戳
print(time.ctime()) #输出Tue Jan 26 18:23:48 2016 ,当前系统时间
print(time.ctime(time.time()-86640)) #将时间戳转为字符串格式
print(time.gmtime(time.time()-86640)) #将时间戳转换成struct_time格式
print(time.localtime(time.time()-86640)) #将时间戳转换成struct_time格式,但返回 的本地时间
print(time.mktime(time.localtime())) #与time.localtime()功能相反,将struct_time格式转回成时间戳格式
#time.sleep(4) #sleep
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将struct_time格式转成指定的字符串格式
print(time.strptime("2016-01-28","%Y-%m-%d") ) #将字符串格式转换成struct_time格式

#datetime module

print(datetime.date.today()) #输出格式 2016-01-26
print(datetime.date.fromtimestamp(time.time()-864400) ) #2016-01-16 将时间戳转成日期格式
current_time = datetime.datetime.now() #
print(current_time) #输出2016-01-26 19:04:30.335935
print(current_time.timetuple()) #返回struct_time格式

#datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
print(current_time.replace(2014,9,12)) #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换

str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式
new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天
new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天
new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时
new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s
print(new_date)

有用的示例

%a    Locale’s abbreviated weekday name.
%A    Locale’s full weekday name.
%b    Locale’s abbreviated month name.
%B    Locale’s full month name.
%c    Locale’s appropriate date and time representation.
%d    Day of the month as a decimal number [01,31].
%H    Hour (24-hour clock) as a decimal number [00,23].
%I    Hour (12-hour clock) as a decimal number [01,12].
%j    Day of the year as a decimal number [001,366].
%m    Month as a decimal number [01,12].
%M    Minute as a decimal number [00,59].
%p    Locale’s equivalent of either AM or PM.    (1)
%S    Second as a decimal number [00,61].    (2)
%U    Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.    (3)
%w    Weekday as a decimal number [0(Sunday),6].
%W    Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.    (3)
%x    Locale’s appropriate date representation.
%X    Locale’s appropriate time representation.
%y    Year without century as a decimal number [00,99].
%Y    Year with century as a decimal number.
%z    Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].
%Z    Time zone name (no characters if no time zone exists).
%%    A literal ‘%‘ character.

常用的时间、日期处理

二、random模块

  用于生成随机数,在实际运用中的校验码就可以用random生成

import random
print random.random()
print random.randint(1,2)
print random.randrange(1,10

生成随机数的例子

import random
checkcode = ‘‘
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)
print checkcode

生成随机验证码的例子

三、os模块:

  提供对操作系统进行调用的接口

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: (‘.‘)
os.pardir  获取当前目录的父目录字符串名:(‘..‘)
os.makedirs(‘dirname1/dirname2‘)    可生成多层递归目录
os.removedirs(‘dirname1‘)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname‘)    生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname‘)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname‘)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat(‘path/filename‘)  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串
os.name    输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
os.path.abspath(path)  返回path规范化的绝对路径
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间

常用的os模块功能

四、sys模块

  用于系统的一些操作

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称
sys.stdout.write(‘please:‘)
val = sys.stdin.readline()[:-1]

常用的sys功能

五、shutil模块

  提供了大量的文件的高级操作。特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作。对单个文件的操作也可参见os模块。

__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2",
           "copytree", "move", "rmtree", "Error", "SpecialFileError",
           "ExecError", "make_archive", "get_archive_formats",
           "register_archive_format", "unregister_archive_format",
           "get_unpack_formats", "register_unpack_format",
           "unregister_unpack_format", "unpack_archive",
           "ignore_patterns", "chown", "which", "get_terminal_size",
           "SameFileError"]

__all__

 copyfile( src, dst)  从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
 copymode( src, dst)  只是会复制其权限其他的东西是不会被复制的
 copystat( src, dst)  复制权限、最后访问时间、最后修改时间
 copy( src, dst)     复制一个文件到一个文件或一个目录
 copy2( src, dst)   在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
 copy2( src, dst)   如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
 copytree(olddir,newdir,True/Flase)  把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接

拷贝文件

shutil.copyfile(src, dst):复制文件内容(不包含元数据)从src到dst。 DST必须是完整的目标文件名;拷贝目录参见shutil.copy()。如果src和dst是同一文件,就会引发错误shutil.Error。dst必须是可写的,否则将引发异常IOError。如果dst已经存在,它会被替换。特殊文件,例如字符或块设备和管道不能使用此功能,因为copyfile会打开并阅读文件。 src和dst的是字符串形式的路径名。

import shutil,os

if os.path.exists("count.py.copy"):      #判断文件是否存在
    os.remove("count.py.copy")           #如果存在则删除

baseDIR = os.path.dirname(os.path.abspath(__file__))
FileSrc = "%s\\count.py"%(baseDIR)
FileDrc = "%s\\count.py.copy"%(baseDIR)

shutil.copyfile(FileSrc,FileDrc)

例子

copystat(src, dst)

复制权限、最后访问时间、最后修改时间

copy(src, dst)

复制一个文件到一个文件或一个目录

copy2(src, dst)

在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了

类似于cp –p的东西

rmtree(path[, ignore_errors[, onerror]])

move(src, dst)

说明:如果两个位置的文件系统是一样的话相当于是rename操作,只是改名如果是不在相同的文件系统的话就是做move操作了!

模块学习步骤二:实例

复制一个文件

import os, string, sys, time, re, math, fileinput, glob, shutil

print os.listdir(‘.‘)

for file in os.listdir(‘.‘):

if os.path.splitext(file)[1] == ".py":

print file

shutil.copy(file, "a.py")

删除一个目录

shutil.rmtree("te")

六、json 和 pickle模块

  json和pickle是做序列化的两个模块

    •   json,用于字符串 和 python数据类型间进行转换
    •   pickle,用于python特有的类型 和 python的数据类型间进行转换

  Json模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load

  pickle模块提供了四个功能:dumps、dump(序列化,存)、loads(反序列化,读)、load  (不仅可以序列化字典,列表...还可以把一个程序,一个类给序列化掉)

‘‘‘
Pickle序列化
python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
‘‘‘

‘‘‘
基本接口:

pickle.dump(obj, file, [,protocol])
注解:将对象obj保存到文件file中去。
protocol为序列化使用的协议版本,0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;
1:老式的二进制协议;2:2.3版本引入的新二进制协议,较以前的更高效。其中协议0和1兼容老版本的python。
protocol默认值为0。
file:对象保存到的类文件对象。file必须有write()接口, file可以是一个以‘w‘方式打开的文件或者一个
StringIO对象或者其他任何实现write()接口的对象。如果protocol>=1,文件对象需要是二进制模式打开的。

pickle.load(file)
注解:从file中读取一个字符串,并将它重构为原来的python对象。
file:类文件对象,有read()和readline()接口。
‘‘‘
#dump
import pickle
name_list = {
    ‘L‘:[1,2,3,4],
    ‘D‘:{‘name‘:‘biggerl‘,‘age‘:27},
     ‘S‘:‘biggerl‘
}
f=open(r‘c:\Users\admin\Desktop\user.pkl‘,‘wb‘)
pickle.dump(name_list,f)  #### encoded_pickle = pickle.dumps(l)
f.close()

#load
import pickle
f=open(r‘c:\Users\admin\Desktop\user.pkl‘,‘rb‘)
D=pickle.load(f) ####decode_pickle = pickle.loads(encoded_pickle)
D
{‘L‘: [1, 2, 3, 4], ‘D‘: {‘age‘: 27, ‘name‘: ‘biggerl‘}, ‘S‘: ‘biggerl‘}

实例

七、shelve模块:

  • shelve模块使用一种类字典的API,可以持久存储可pickle的任意python对象。当不需要关系数据库的时候,shelve模块可以用作Python对象的的一个简单的持久存储选择,类似与字典,shelf要按键来访问,值将被pickle并写至anydbm创建和管理的数据库。
  • 什么是shelve?  类似与python内置类型字典(This is initialized with a dictionary-like object.),当创建了数据之后,如果再次访问数据,可以打开shelve,像字典一样使用。

1 >>> import shelve
2
3 >>> s = shelve.open(‘test.dat‘)
4 >>> s[‘x‘] = [‘a‘, ‘b‘, ‘c‘]
5 >>> s[‘x‘].append(‘d‘)
6 >>> s[‘x‘]
7 [‘a‘, ‘b‘, ‘c‘]  

例子

import shelve

d = shelve.open(‘shelve_test‘) #打开一个文件

class Test(object):
    def __init__(self,n):
        self.n = n

t = Test(123)
t2 = Test(123334)

name = ["alex","rain","test"]
d["test"] = name #持久化列表
d["t1"] = t      #持久化类
d["t2"] = t2

d.close()

例子

八、xml模块:

ml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

xml的格式如下,就是通过<>节点来区别数据结构的:

xml的格式如下,就是通过<>节点来区别数据结构的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag)

#遍历xml文档
for child in root:
    print(child.tag, child.attrib)
    for i in child:
        print(i.tag,i.text)

#只遍历year 节点
for node in root.iter(‘year‘):
    print(node.tag,node.text)
修改和删除xml文档内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()

#修改
for node in root.iter(‘year‘):
    new_year = int(node.text) + 1
    node.text = str(new_year)
    node.set("updated","yes")

tree.write("xmltest.xml")

#删除node
for country in root.findall(‘country‘):
   rank = int(country.find(‘rank‘).text)
   if rank > 50:
     root.remove(country)

tree.write(‘output.xml‘)
自己创建xml文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import xml.etree.ElementTree as ET

new_xml = ET.Element("namelist")
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
age = ET.SubElement(name,"age",attrib={"checked":"no"})
sex = ET.SubElement(name,"sex")
sex.text = ‘33‘
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = ‘19‘

et = ET.ElementTree(new_xml) #生成文档对象
et.write("test.xml", encoding="utf-8",xml_declaration=True)

ET.dump(new_xml) #打印生成的格式

例子

九、yaml模块:

Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation

十、configparser模块:

用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。

来看一个好多软件的常见文档格式如下

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes

[bitbucket.org]
User = hg

[topsecret.server.com]
Port = 50022
ForwardX11 = no

如果想用python生成一个这样的文档怎么做呢?

import configparser

config = configparser.ConfigParser()
config["DEFAULT"] = {‘ServerAliveInterval‘: ‘45‘,
                      ‘Compression‘: ‘yes‘,
                     ‘CompressionLevel‘: ‘9‘}

config[‘bitbucket.org‘] = {}
config[‘bitbucket.org‘][‘User‘] = ‘hg‘
config[‘topsecret.server.com‘] = {}
topsecret = config[‘topsecret.server.com‘]
topsecret[‘Host Port‘] = ‘50022‘     # mutates the parser
topsecret[‘ForwardX11‘] = ‘no‘  # same here
config[‘DEFAULT‘][‘ForwardX11‘] = ‘yes‘
with open(‘example.ini‘, ‘w‘) as configfile:
   config.write(configfile)
 

写完了还可以再读出来哈。

>>> import configparser

>>> config = configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read(‘example.ini‘)
[‘example.ini‘]
>>> config.sections()
[‘bitbucket.org‘, ‘topsecret.server.com‘]
>>> ‘bitbucket.org‘ in config
True
>>> ‘bytebong.com‘ in config
False
>>> config[‘bitbucket.org‘][‘User‘]
‘hg‘
>>> config[‘DEFAULT‘][‘Compression‘]
‘yes‘
>>> topsecret = config[‘topsecret.server.com‘]
>>> topsecret[‘ForwardX11‘]
‘no‘
>>> topsecret[‘Port‘]
‘50022‘
>>> for key in config[‘bitbucket.org‘]: print(key)
...
user
compressionlevel
serveraliveinterval
compression
forwardx11
>>> config[‘bitbucket.org‘][‘ForwardX11‘]
‘yes‘

configparser增删改查语法
[section1]
k1 = v1
k2:v2

[section2]
k1 = v1

import ConfigParser

config = ConfigParser.ConfigParser()
config.read(‘i.cfg‘)

# ########## 读 ##########
#secs = config.sections()
#print secs
#options = config.options(‘group2‘)
#print options

#item_list = config.items(‘group2‘)
#print item_list

#val = config.get(‘group1‘,‘key‘)
#val = config.getint(‘group1‘,‘key‘)

# ########## 改写 ##########
#sec = config.remove_section(‘group1‘)
#config.write(open(‘i.cfg‘, "w"))

#sec = config.has_section(‘wupeiqi‘)
#sec = config.add_section(‘wupeiqi‘)
#config.write(open(‘i.cfg‘, "w"))

#config.set(‘group2‘,‘k1‘,11111)
#config.write(open(‘i.cfg‘, "w"))

#config.remove_option(‘group2‘,‘age‘)
#config.write(open(‘i.cfg‘, "w"))

 

十一、hashlib模块:

  涉及加密服务:14. Cryptographic Services,其中 hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法借口,如SHA1、SHA224、SHA256、SHA384、SHA512、MD5等。

import hashlib
m = hashlib.md5()   #创建hash对象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一个128位的密文
print m             #<md5 HASH object @ 000000000254ADF0>
m.update(‘BeginMan‘)#更新哈希对象以字符串参数
print m.digest()    #返回摘要,作为二进制数据字符串值
print m.hexdigest() #返回十六进制数字字符串    0b28251e684dfbd9102f8b6f0281c0c5
print m.digest_size #16
print m.block_size  #64

使用new()创建指定加密模式的hash对象

new(name, string=‘‘)
     """
     Return a new hashing object using the named algorithm;
     optionally initialized with a string.
     """
h = hashlib.new(‘md5‘)
print h     #<md5 HASH object @ 000000000260BDB0>
h2 = hashlib.new(‘ripemd160‘,‘what‘)
print h2    #<ripemd160 HASH object @ 000000000271B9F0>
h.update(‘beginman‘)
print h.hexdigest() #666fc5baa93a7fb207c5bfff03b67732
#等效
s = hashlib.md5()
s.update(‘beginman‘)
print s.hexdigest() #666fc5baa93a7fb207c5bfff03b67732

print h2.hexdigest()    #9c1185a5c5e9fc54612808977ee8f548b2258d31

常用属性

#属性
print hashlib.algorithms    #(‘md5‘, ‘sha1‘, ‘sha224‘, ‘sha256‘, ‘sha384‘, ‘sha512‘)    列出所有加密算法
print h.digest_size         #16 产生的散列的字节大小。
print h.block_size          #64 The internal block size of the hash algorithm in bytes.

常用方法

hash.update(arg)

更新哈希对象以字符串参数,如果同一个hash对象重复调用该方法,则m.update(a); m.update(b) is equivalent to m.update(a+b).

hash.digest()

返回摘要,作为二进制数据字符串值,

hash.hexdigest()

返回摘要,作为十六进制数据字符串值,

hash.copy()

复制

实例

import datetime
KEY_VALUE = ‘/BeginMan/‘
now = datetime.datetime.now()
m = hashlib.md5()
str = ‘%s%s‘ %(KEY_VALUE,now.strftime("%Y%m%d"))
m.update(str)
value = m.hexdigest()
print value #8db42d3e90b41105ed061b8347a7c850

import hashlib

m = hashlib.md5()
m.update(b"Hello")
m.update(b"It‘s me")
print(m.digest())
m.update(b"It‘s been a long time since last time we ...")

print(m.digest()) #2进制格式hash
print(len(m.hexdigest())) #16进制格式hash
‘‘‘
def digest(self, *args, **kwargs): # real signature unknown
    """ Return the digest value as a string of binary data. """
    pass

def hexdigest(self, *args, **kwargs): # real signature unknown
    """ Return the digest value as a string of hexadecimal digits. """
    pass

‘‘‘
import hashlib

# ######## md5 ########

hash = hashlib.md5()
hash.update(‘admin‘)
print(hash.hexdigest())

# ######## sha1 ########

hash = hashlib.sha1()
hash.update(‘admin‘)
print(hash.hexdigest())

# ######## sha256 ########

hash = hashlib.sha256()
hash.update(‘admin‘)
print(hash.hexdigest())

# ######## sha384 ########

hash = hashlib.sha384()
hash.update(‘admin‘)
print(hash.hexdigest())

# ######## sha512 ########

hash = hashlib.sha512()
hash.update(‘admin‘)
print(hash.hexdigest())

例子

时间: 2024-08-06 16:05:33

Python自动化开发从浅入深-语言基础(常用模块)的相关文章

Python自动化开发从浅入深-语言基础(collection)

-- collection是对内置数据类型的一种扩充,其主要扩充类型包括: 1.namedtuple(): 生成可以使用名字来访问元素内容的tuple子类,以增强可读性. def namedtuple(typename, field_names, verbose=False, rename=False): """Returns a new subclass of tuple with named fields. 返回一个新的命名域元组子类,typename为类型名,field

Python自动化开发从浅入深-语言基础(正则表达式)

 正则表达式是处理字符串的强大工具,它通过一定的语法规则查找匹配字符串,并返回自己想获取的字符串值. 即让字符串与某种模式匹配,而获取一个新的序列. 如要使用正则表达式语法,需import re模块,然后使用 r"正则表达式" (解释性正则定义)定义正则规则,也可通过 re.compile(r"正则表达式") (编译性正则定义)进行正则定义,编译性正则定义效率较解释性正则定义要高. 一.正则表达式元字符包括: . ^ $ * + ? { [ ] \ | ( ) 元字

Python自动化开发从浅入深-语言基础(set)

set的概念有点类似于hash表,它是一个无序但不重复的元素集合.而列表.元祖和字典数据都是可以重复的. set可以方便的进行求交.差.对称差.并集等计算和比对,这在其他序列操作中则比较复杂.  如图,通过set命令就建立了一个set集合: 定义了set,我们就可以进行以下操作: 添加一个元素,如图,添加一个元素7 一次添加多个元素,如图,添加了7,9,11 删除一个元素,如图,将a中的5去掉 求set的长度,如图,求出长度为6 查看某个值是不是另一个set的元素,或不是另一个set的成员. 查

Python自动化开发从浅入深-进阶(script,dom,jquery 基础)

JavaScript (可以对html标签及CSS进行操作) Dom (API,提供找寻html中的标签,以便于使用JS对所找到的标签或CSS进行相应的操作) jQuery (用于将复杂的逻辑和运算封装到一个包中供外部调用) JavaScript: <srcipt>...</script> 存在的形式:文件,块 一般在body的底部书写. --- 声明变量: name = "alex" :(全局变量) var age=18:     (局部变量) --- 数字:

Python自动化开发从浅入深-进阶(socketServer)

socketserver: --- 每一个连接过来都会单独创建一个线程. ---socketserver处理的线程数目与服务器资源配置有关 socketserver有四个基本的类: --- TCPServer ---UDPServer ---UnixStreamServer ---UnixDatagramServer 这四个类的同步请求,每一个请求只有完成后才能进行下一个请求.不适合进行长时间的大数据计算,所以需要单独创建进程或线程来处理每个请求.ForkingMixIn和ThreadingMi

Python自动化开发从浅入深-进阶(进程)

今天的作业涉及到了进程,那么就用作业来说明进程的用法: 这里我们定义了2个函数 getParamikoCmd 和 batchCmd,用于批量向远程服务器发送ssh命令,并返回执行结果. 执行batchCmd进行一些用户交互和参数获取(这里是一组服务器分组信息),循环发起进程批量执行ssh命令,每个进程调用getParamikoCmd 函数进行ssh命令执行. 进程之间是相互独立的,数据不会相互共享,这样可独立完成其任务而不会相互影响. def getParamikoCmd(groupName,s

浅入深出之Java集合框架(上)

Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架(下)>. 目录: 浅入深出之Java集合框架(上) 浅入深出之Java集合框架(中)   努力赶制中..关注后更新会提醒哦! 浅入深出之Java集合框架(下) 努力赶制中..关注后更新会提醒哦! 一.集合概述 1)集合的概念 现实生活中的集合:很多事物凑在一起. 数学中的集合:具有共同属性的事物的总体

浅入深出Vue:第一个页面

今天正式开始入门篇,也就是实战了~ 首先我们是要做一个博客网站,UI 框架采用江湖传闻中的 ElementUI,今天我们就来利用它确定我们博客网站的基本布局吧. 准备工作 新建一个vue项目(可以参考基础篇里的搭建方法,也可以参考官网现在最近的 Vue CLI 3.x进行可视化创建和管理 安装 vue-router 安装 elementui 以上的操作都可以在之前的博文中(基础篇)找到完整步骤,这里就不重复了. 我们做完准备工作之后,目录结构如下: 我们来看看这个目录: |--public 公共

浅入深出ElasticSearch构建高性能搜索架构

浅入深出ElasticSearch构建高性能搜索架构  课程学习地址:http://www.xuetuwuyou.com/course/161 课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程用到的软件 ElasticSearch5.0.0 Spring Tool Suite 3.8.2.RELEASE Maven3.0.5 Spring4 Netty4 Hadoop2.7.1 Kibana5.0 JDK1.8.0_111 二.课程目标 1.快速学习Elastic