python_day5_模块

简介:

5.1 模块说明

5.2 模块

1
2
3
4
5
6
7
8
9
10
11
12
13
time
datetime
random
os
shutil
json
pickle
shelve
xml
hashlib
hmac
正则表达式
configparser

模块定义:

    模块:从逻辑上来组织python代码(定义变量,函数,类,逻辑,其就是为了实现一个功能),本质就是.py结尾的python文件

    包: 用来从逻辑上组织模块,与文件的区别就是带了一个__init__.py文件



模块导入:  导入模板就是把Python文件解释了一遍

    import module_name                             #导入单个模块

    import module_name1,module_name2,module_#**    #导入多个模块

        调用方法  module_name.方法


    from module_file import *                      #导入模块中的所有方法及函数 (不建议使用)

    from module_file import module_name            #导入模块中的方法或函数   (也可以多个方法)

    from module_file import module_name as alias   #定义module_name别名


包导入:    导入包就是解释__init__文件

1
2
     import  py_pack_name      # 执行包下面的 __init__.py文件
     from  module_name_packer   import  module_name

模块分类:

    1、标准库

    2、开源模块(第三方模块)

    3、自定义


    #time 模块  

1
2
3
4
5
6
7
8
         time.sleep()          # (秒)
         print (time.time())    # 时间戳 1506492926.3223119    从1970年1月1日开始记秒
         print (time.localtime())    
           # time.struct_time(tm_year=2017, tm_mon=9, tm_mday=27, tm_hour=14, tm_min=11, tm_sec=46, tm_wday=2, tm_yday=270, tm_isdst=0)
 
         time.strftime()       # now_time=time.localtime()     
                              # print(time.strftime("%Y-%m-%d %H:%M:%S",now_time))
                              # 结果: 2017-09-27 14:04:27

        ti=time.strptime('2017-09-27 14:15:26','%Y-%m-%d %H:%M:%S')     # 格式化字符串打印的结果与time.time一样,但有值之后就能直接取出年月日值

            print(ti.tm_hour)   # 14   这样能直接打印出月份


         # 将时间戳转换成时间

1
2
         x = time.localtime(time.time())
         print (time.strftime( '%Y-%m-%d %X' ,x))

        # 将当前时候转换为时间戳

1
         print (time.mktime(time.localtime()))

    # datetime 模块

1
2
3
4
         import  datetime
         print (datetime.datetime.now())       # 获取当前时间 2017-11-02 14:39:44.929088
         print (datetime.datetime.now() + datetime.timedelta( 3 ))           # 往前加3天
         print (datetime.datetime.now() + datetime.timedelta(hours = - 3 ))    # 3小时以前的时间

    # random  随机数 限定0-1

1
2
3
4
5
         print (random.random())      #随机获取一个0-1之间的随机数
         print (random.randint( 1 , 3 ))   # 从1-3随机挑选一个数
         print (random.randrange( 1 , 100 ))   # 随机生成一个范围内的数值
         print (random.sample([ '123' , '32' , '3' ], 2 ))     # 列表随机生成一个2位的数['32', '123']
         print (random.choice([ '1' , '2' , '3' ]))          # 随机生成一个数值

    # chr  转换ascii码对应的数值表 如65对应A      65-91表示ASCII码的 A-Z

        常见字符的ASCII码值如下:空格的ASCII码值为32;数字0到9的ASCII码值分别为48到57;大写字母“A”到“Z”的ASCII码值分别为65到90;小写字母“a”到“z”的ASCII码值分别为97到到122。



    # 生成一个6位的随机生成数

1
2
3
4
5
6
7
8
9
10
         import  random
 
         def  v_random():
             a_num = ''
             for  in  range ( 6 ):
                 r_num = random.choice([random.randrange( 10 ), chr (random.randint( 65 , 91 )), chr (random.randint( 97 , 122 ))])
                 a_num + = str (r_num)
             print (a_num)
 
         v_random()               # 打印结果 cyY4N6

    # os 模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
         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.name    输出字符串指示当前使用平台。win - > 'nt' ; Linux - > 'posix'
         os.environ  获取系统环境变量
         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所指向的文件或者目录的最后修改时间

        # 重要的方法

1
2
3
4
5
6
7
8
9
             os.sep    输出操作系统特定的路径分隔符,win下为 "\\",Linux下为" / "
             os.linesep    输出当前平台使用的行终止符,win下为 "\t\n" ,Linux下为 "\n"
             os.pathsep    输出用于分割文件路径的字符串
             os.system( "bash command" )  运行shell命令,直接显示
             os.path.abspath(path)  返回path规范化的绝对路径
             os.path.split(path)  将path分割成目录和文件名二元组返回        
             os.path.exists(path)  如果path存在,返回 True ;如果path不存在,返回 False
             os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
             os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

            # 跨平台需要   windows的是\ linux的是/

1
2
3
                 s = os.sep
                 os.chdir(r 'C:%sUsers\xiong\Desktop\untitled' % s)
                 print (os.getcwd())

    # shutil    

1
2
3
4
5
6
7
8
9
10
11
12
13
             shutil.copyfileobj(file_src,file_dst)
                 file1 =  open ( 'file_name.txt' ,encoding = 'utf-8' )
                 file2 =  open ( 'file_name.txt' , 'w' ,encoding = 'utf-8' )
                 shutil.copyfileobj(file1,file2)
 
             shutil.copymode(src,dst)            #仅拷贝权限。内容,组,用户不变
             shutil.copystat(源文件,目标文件)    # 拷贝文件,以及状态信息
             shutil.copy(源文件,目标文件)        # 拷贝文件及权限
             shutil.copy2(源文件,目标文件)       # 拷贝文件及状态信息
             shutil.copytree(源目录,目标目录)    # 拷贝整个目录
             shutil.rmtree(目录名称)             # 删除整个目录(有风险)
             shutil.mak_archive(base_name, format ,...)     # 创建压缩包并返回文件路径
             shutil.make_archive(r 'C:\xx\day1' , 'zip' ,r 'C:\xx\day1' )       #压缩day1目录,并保存在xx目录下 类型是zip

                base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

                format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

                root_dir:   要压缩的文件夹路径(默认当前目录)

                owner:  用户,默认当前用户

                group:  组,默认当前组

                logger: 用于记录日志,通常是logging.Logger对象


    # json 序列化        只能处理简单的字典文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
         json.dumps()        序列化字典
             import  json
             info  =  {
                 "name" : "xiong" ,
                 "age" 50 ,
                 "sex" 'man'
             }
             with  open ( 'json_test.txt' , 'w' ,encoding = 'utf-8' ) as  file :
                 file .write(json.dumps(info))         # 用法一
                 # json.dump(info,file)              # 用法二
 
 
         json.loads()        反序列化字典      只能dump一次字典,
             with  open ( 'json_test.txt' , 'r' ,encoding = 'utf-8' ) as  file :
                 # data=json.loads(file.read())      # 用法一
                 data = json.load( file )                 # 用法二
                 print (data)

    pickle 序列化字典    可处理复制的字典,但只能在py上运行,其它语言不行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
         pickle.dumps()      序列化字典     相等于 pickle.dump(对象,文件)
         import  pickle
         def  du(hobby):
             print ( "hobby" ,hobby)
         info  =  {
             "name" : "xiong" ,
             "age" 50 ,
             "hobby" : du
         }
         with  open ( 'json_test.txt' , 'wb' ) as  file :
             file .write(pickle.dumps(info))
 
         pickle.loads()      反序列化字典  相等于 pickle.load(文件)
         import  pickle
 
         def  du(hobby):
             print ( "hobby" ,hobby)

        # 以二进制的方式查看,函数必须在反序列号中也存在,否则将会报错

        with open('json_test.txt','rb') as file:    

            # 打开文件并以行的文件阅读

            data=pickle.loads(file.read())          

            # 传递参数给函数,pickle 函数序列化中能在py中能使用,其它语言没法用

            print(data['hobby']('cat'))


    # shelve 模块 一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的Py数据格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     import  shelve,datetime
 
     w = shelve. open ( 'shelve.txt' )      # 先打开一个文件
     
     info = { 'age' : 222 , 'jobs' : 'it' }
     name = [ 'xiong' , 'ab' ]
     
     w[ "info" ] = info       # 持久化数据
     w[ "name" ] = name
     w[ 'date' ] = datetime.datetime.now()
 
     w.close()            #关闭文件
 
     # 查看shelve序列化的数据
     w = shelve. open ( 'shelve.txt' )
     print (w.get( "name" ))
     print (w.get( "info" ))
     w.close()
 
     打印结果[ 'xiong' 'ab' ]
             { 'age' 222 'jobs' 'it' }
             2017 - 11 - 02  21 : 17 : 43.986210

# xml模块

1
2
3
4
5
6
7
8
9
10
import  xml.etree.ElementTree as ET
 
tree = ET.parse( 'xmltests.xml' )        # 打开xml文件
root = tree.getroot()                  # 获取xml文件树
print (root.tag)                      # 打印标签首页
 
for  chi  in  root:                  # 循环标签首页
     print (chi.tag,chi.attrib)        # 打印标签中所有的标签以及属性
     for  in  chi:
         print (i.tag,i.text,i.attrib)     # 打印内容标签,内容,以及属性资料

# 只打印xml中树中某一个键值对的信息

1
2
3
4
5
6
7
8
9
10
11
     for  in  root. iter ( 'gdppc' ):
             print (i.tag,i.text)
 
 
     import  hashlib
 
     m = hashlib.md5()
     print (m)
 
     m.update( 'hello' .encode( 'utf8' ))
             print (m.hexdigest())

configparser模块

# 给配置文件中写入内容

1
2
3
4
5
6
7
import  configparser
conf = configparser.ConfigParser()           # 文件操作句柄
conf[ 'DEFAULT' ] = { 'one1' : '1' ,
                  'two2' : '2' }
conf[ 'DEFAULT' ][ 'three3' ] = '3'
with  open ( 'conf.tini' , 'w' ,encoding = 'utf-8' ) as confile:
     conf.write(confile)

    configparser模块_查看

# 打印文件的全部内容,以元组的形式

1
2
3
with  open ( 'conf.tini' , 'r' ,encoding = 'utf-8' ) as xx:
     for  in  xx:
        print (i.split())

# 读配置文件中的sections, DEFAULT无法打印出来, 需要其它选项

conf.read('conf.ini')

print(conf.sections())

# 打印结果 ['test2']


# 打印DEFAULT键值对的值

print(conf.defaults())

# 打印结果 OrderedDict([('one1', '1'), ('two2', '2'), ('three3', '3')])# OrderedDict有序的排序


# 判断键是否存在配置文件中

print('test2' in conf)

# 结果: True

print('test3' in conf)

# 结果: False


# 取出配置文件中键值

print(conf['test2']['test'])

# 结果: test1


# 打印某个键

for i in conf['test2']:

    print(i)

# 打印结果:  打印这个键的时候 它也会打印出DEFAULT的特殊值 

test 

test2

one1

two2

three3


# 删除配置文件中的键值

1
2
3
4
conf = configparser.ConfigParser()     # 定义一个操作句柄,没有这个配置操作会出错
conf.read( 'conf.tini' )               # 每次操作的时候一定要先打开文件然后再操作
conf.remove_section( 'test2' )         # 删除键
conf.write( open ( 'conf.tini' , 'w' ))    # 修改删除键的配置文件,此处需要注意的是这里是覆盖原文件

# 只是修改覆盖而不是直接删除

1
         conf.remove_option( 'test3' , 'ess' )     选项 键,值

        #     键     值    内容

1
2
         conf[ 'test3' ][ 'ess' ] = '333'           # 新加一个键
         conf. set ( 'test3' , 'ess' , '4444' )       # 删除新加的键

        # 删除配置的选项

1
2
         conf.remove_option( 'xxxxx' , 'xx3' )
         conf.write( open ( 'confi.txt' , 'w' ,encoding = 'utf-8' ))

        # 注意要修改或删除某个值时,一定要带有 操作句柄以及修改文件的目录 

1
2
         conf = configparser.ConfigParser()
         conf.write( open ( 'conf.tini' , 'w' ))

    # hashlib 模块

1
2
3
4
5
         import  hashlib
 
         m2 = hashlib.md5()         # md5加密
         m2.update(b 'A97yd2' )     # 设置一个md5加密密码
         print (m2.hexdigest())    # 打印16进制的数值出来

    # hmac 模块  中文字符需要encode

1
2
         =  hmac.new(b 'teststs' )
         print (h.hexdigest())


正则表达式

re(正则表达式) 是py引入的一个接口


元字符 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
b 表示一次或零次
.:匹配任意单个字符
[] 中括号                : 匹配指定范围内的任意单个字符,取消元字符的特殊功能() 
     [^字符] 意味着取反   []中所有的非
[^]中括号加尖括号: 匹配指定范围之外的任意单个字符    逻辑非      
匹配字符次数:(贪婪模式. * 尽可能长的匹配)
() 一个组内容
| 或  a|b    a或者b
* :匹配其前面的字符  0 到无穷次
+ : 至少匹配 1 次到无穷次
?: 可以匹配  0 次或 1 次 惰性匹配
. *  : 任意长度的任意字符
{m,n}:匹配其前面的字符至少m次,至多N次   
         { 0 ,} 等于无穷次
         { 0 , 1 } 等于?
         { 6 }至少六次        { 1 , 3 }最多三次


位置锚定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
^  :锚定行首,此字符后面的匹配到的任意内容必须出现在行首
$   :锚定行尾,此字符后面的匹配到的任意内容必须出现在行尾
 
[]字符集:  [ 1 , 2 , 3 ]表示只要有其中一个就能获取
     
 
\ 反斜杠后边跟元字符去除特殊功能
   反斜杠后边跟普通字符实现特殊功能
 
\d  匹配任何十进制数;它相当于类 [ 0 - 9 ]。
\D 匹配任何非数字字符;它相当于类 [^ 0 - 9 ]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任匹配任何字母数字字符;它相当于类何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w  [a - zA - Z0 - 9_ ]。
\W 匹配任何非字母数字字符;它相当于类 [^a - zA - Z0 - 9_ ]
\b  匹配一个特殊字符边界,比如空格 ,&,#等
?P< id > 固定格式起一个名字
         ret = re.search(r '(?P<www>[a-z]{3})\.(?P<domain>\w*)' , 'www.baidu.com' )
         print (ret.group( 'www' ))
         print (ret.group( 'domain' ))
             打印结果: www
                        baidu


匹配出满足条件的第一个结果

1
xx.search( 'xx' , 'sdfasdffdsxx' ).group()     # 不加.group打印出来的是一个对象


方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     #  查找  findall(pattern, string, flags=0)
     1 、findall(): 所有结果都返回到一个列表中  
         # 使用: findall(匹配规则,内容)
     2 、search() : 返回一个对象( object ), 对象可以调用group() 方法来获取返回结果
     3 、match() :  只在字符串开始匹配 跟 ^锚定类式
     4 、split() : 分割换行
     
     5 、sub() :  sub( '规则' , '替换的新内容' , '替换内容' )
             re.sub( 'x..x' , 'ax' , 'xyyx' )
             打印结果: ax
 
     6 compile () : 将规则预先定义好, 然后再使用
 
     # findall会先打印出组内的内容,
         print (re.findall( 'www\.(163|222)\.com'  "www.163.com" ))   # 打印结果: ['163']
     
     # 取消优先打印组内的内容,将结果全部打印出来
         print (re.findall( 'www\.(?:163|222)\.com'  "www.163.com" ))
# 打印结果: ['www.163.com']


configparser模块

# 给配置文件中写入内容

1
2
3
4
5
6
7
import  configparser
conf = configparser.ConfigParser()           # 文件操作句柄
conf[ 'DEFAULT' ] = { 'one1' : '1' ,
                  'two2' : '2' }
conf[ 'DEFAULT' ][ 'three3' ] = '3'
with  open ( 'conf.tini' , 'w' ,encoding = 'utf-8' ) as confile:
     conf.write(confile)

configparser模块_查看

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
26
27
28
29
30
31
32
33
34
35
36
37
# 打印文件的全部内容,以元组的形式
with  open ( 'conf.tini' , 'r' ,encoding = 'utf-8' ) as xx:
     for  in  xx:
        print (i.split())
 
# 读配置文件中的sections, DEFAULT无法打印出来, 需要其它选项
conf.read( 'conf.ini' ,encoding = 'utf-8' )
print (conf.sections())
# 打印结果 ['test2']
 
# 打印DEFAULT键值对的值
print (conf.defaults())
# 打印结果 OrderedDict([('one1', '1'), ('two2', '2'), ('three3', '3')])      # OrderedDict有序的排序
 
# 判断键是否存在配置文件中
print ( 'test2'  in  conf)
# 结果: True
print ( 'test3'  in  conf)
# 结果: False
 
# 以列表打印出该配置段中所有的选项
print (conf.items( 'test2' ))
# 结果: [('name', 'xx'), ('age', 'man'), ('human', 'y')]
 
# 取出配置文件中键值
print (conf[ 'test2' ][ 'test' ])
# 结果: test1
 
# 打印某个键
for  in  conf[ 'test2' ]:
     print (i)
# 打印结果:  打印这个键的时候 它也会打印出DEFAULT的特殊值 
     test 
     test2
     one1
     two2
     three3

添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 添加一个配置段
conf = configparser.ConfigParser()     # 创建一个对象 
conf.add_section( 'test' )             # 添加配置段
conf. set ( 'test' , 'name' , 'xiong' )      # 添加配置段文件
conf.write( open ( 'i.ini' , 'w' ))        # 修改并添加文件
 
修改
     # 删除配置文件中的键值
     conf = configparser.ConfigParser()     # 定义一个操作句柄,没有这个配置操作会出错
     conf.read( 'conf.tini' )               # 每次操作的时候一定要先打开文件然后再操作
     conf.remove_section( 'test2' )         # 删除整个标题
     conf.write( open ( 'conf.tini' , 'w' ))    # 修改删除键的配置文件,此处需要注意的是这里是覆盖原文件
 
     # 只是修改覆盖而不是直接删除
     conf.remove_option( 'test3' , 'ess' )     选项 键,值 
     #    键       值    内容
     conf[ 'test3' ][ 'ess' ] = '333'           # 新加一个键
     conf. set ( 'test3' , 'ess' , '4444' )       # 删除新加的键

# 注意要修改或删除某个值时,一定要带有 操作句柄以及修改文件的目录 

1
2
conf = configparser.ConfigParser()
conf.write( open ( 'conf.tini' , 'w' ))




     本文转自812374156 51CTO博客,原文链接:http://blog.51cto.com/xiong51/1979076,如需转载请自行联系原作者



相关文章
|
1天前
|
缓存 Python
在Python中,`functools`模块提供了一个非常有用的装饰器`lru_cache()`,它实现了最近最少使用(Least Recently Used, LRU)缓存策略。
在Python中,`functools`模块提供了一个非常有用的装饰器`lru_cache()`,它实现了最近最少使用(Least Recently Used, LRU)缓存策略。
|
9天前
|
资源调度 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python UDF(User-Defined Function)来引用第三方模块
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
12天前
|
Go C# Python
Python 的 shutil 模块
`shutil`是Python标准库中的模块,提供高级文件和目录操作,如复制、移动、重命名、删除以及创建和删除目录。它扩展了`os`模块的功能,支持递归操作,例如`shutil.copytree()`用于递归复制目录,`shutil.rmtree()`用于递归删除目录。`shutil.move()`不仅移动文件,还可用于重命名。`shutil.remove()`和`shutil.rmtree()`分别用于删除文件和目录。这个模块对于文件管理任务非常实用。
|
12天前
|
缓存 数据库连接 API
Python模块如何影响代码的可读性?
【7月更文挑战第15天】Python模块如何影响代码的可读性?
15 3
|
12天前
|
并行计算 大数据 编译器
Python模块如何影响性能?
【7月更文挑战第15天】Python模块如何影响性能?
5 1
|
12天前
|
数据采集 程序员 开发者
Python模块
【7月更文挑战第15天】Python模块
7 1
|
13天前
|
关系型数据库 数据处理 数据库
Python中的异步编程:理解asyncio模块及其应用
在现代编程中,异步编程变得越来越重要。Python中的asyncio模块为开发者提供了强大的工具,帮助他们利用异步编程模式来处理高并发和IO密集型任务。本文将深入探讨asyncio模块的核心概念、基本用法以及实际应用场景,帮助读者更好地理解和运用Python中的异步编程技术。
|
13天前
|
开发者 Python
确保你的Python环境中已经安装了`python-docx`模块。如果还没有安装,可以通过pip来安装:
确保你的Python环境中已经安装了`python-docx`模块。如果还没有安装,可以通过pip来安装:
|
13天前
|
资源调度 计算机视觉 Python
`scipy.ndimage`是SciPy库中的一个子模块,它提供了许多用于处理n维数组(通常是图像)的函数。
`scipy.ndimage`是SciPy库中的一个子模块,它提供了许多用于处理n维数组(通常是图像)的函数。
|
13天前
|
Python
`scipy.signal`模块是SciPy库中的一个子模块,它提供了信号处理、滤波、频谱分析等功能。这个模块包含了许多用于信号处理的函数和类,其中`butter()`和`filtfilt()`是两个常用的函数。
`scipy.signal`模块是SciPy库中的一个子模块,它提供了信号处理、滤波、频谱分析等功能。这个模块包含了许多用于信号处理的函数和类,其中`butter()`和`filtfilt()`是两个常用的函数。