python基本知识(六):模块

‘‘‘Modules: 模块       1) module的基本常识       2) 常用的modules:          time. random, os, sys, logging, hashlib, re          json, pickle, xml, configparser, io            

‘‘‘ # 综述

‘‘‘module的基本常识:         1. 结构:            package               |-- __init__.py   # 必须的, 也是一个module               |-- module1                      |-- class                      |-- function               |-- module2

         2. __name__ 属性:                在module1.py中,  module1.__name__ == "__main__"                在module2.py中,  module2.__name__ == "module1"  

         3. 模块的导入:             import:                                           1) 同一个模块只导入一次, 并加载到内存中            2) 模块的第一次导入:                              1> 为模块创建新的命名空间                             2> 顺序执行模块中的代码                             3> 创建变量来引用该命名空间

            from.. import..: 与import不同的是, 直接将module导入到当前的命名空间, 可能会存在执行冲突            from.. import..as: 模块重命名, 解决冲突

         4. 模块的用途:                      1) 脚本: 导入时运行                     2) 调用: 后面调用                         

         5. 模块的搜索顺序:               内存中已经加载的模块 --> 内置模块 --> sys.path中的模块                sys.path设置:                           BASE_DIR = os.path.dirname(os.path.dirname(__file__))  # 退回到根目录, __file__ 为当前文件的目录                           sys.path.append(BASE_DIR)                                                       ‘‘‘ # modules的基本常识

‘‘‘                 time: 时间模块      1. 三种形式的时间:                     1) Format          # 用于表示  %Y %m %d %X(%H %M %S) %a星期                     2) Struct_time     # 用于存储信息, 结构体, 可通过属性拿到                     3) Timestamp       # 用于计算      2. 转化:             1) Timestamp --> Struct_time:  time.localtime([time.time()])             2) Struct_time --> Timestamp:  time.mktime(time.localtime())             3) Struct_time --> Format:     time.strftime(format,time.localtime())                Format --> Struct_time:     time.strptime(‘str‘,format)

             4) Struct_time --> Format(固定格式):  time.asctime(time.localtime())             5) Timestamp --> Format(固定格式):    time.ctime(time.time()) 

      * datetime.datetime.now()        # 获取当前时间                                 ‘‘‘ # time: 时间模块

‘‘‘random: 生成随机数        1. 方法:                random()        # [0,1] float               randint(a,b)    # [a,b] int               randrange(d)    # (0,d) int               choice(Seq)     # 从Seq随机取一个元素               shuffle(list)   # 原地打乱list

               uniform(a,b)              # 均匀分布               expovariate(lambda)       # 指数分布               gauss(mu,sigma)           # 高斯分布               lognormvariate(mu,sigma)  # lognormal分布

‘‘‘ # random: 生成随机数

‘‘‘os: 与操作系统交互    1. 基本操作

os: 与操作系统交互    1. 路径标识符:            os.curdir            # 当前相对目录, ‘.‘            os.pardir            # 相对父目录, ‘..‘            os.sep               # 路径分隔符, ‘\\‘            os.linesep           # 行终止符, ‘\r\n‘            os.pathsep           # 文件分隔符, ‘;‘     

    2. 操作路径: os.path            __file__                        # 当前.py文件相对路径            os.path.abspath(path)           # 规范化绝对路径            os.path.split(path)             # (上一级目录, 最后一级目录)            os.path.dirname(path)           # 上一级目录            os.path.basename(path)          # 最后一级目录            os.path.splitext(file.py)       # (文件名, 文件格式)            os.path.join(path1, path2)      # 连接路径    

            os.path.exists(path)            # 判断路径是否存在            os.path.isdir(path)             # 判断是否为文件夹            os.path.isfile(path)            # 判断是否为文件

            os.path.normcase(path)          # 路径格式化 

    3. 操控系统           os.getcwd()                       # 当前工作绝对路径, __file__上一级目录           os.chdir(‘path‘)                  # 进入下级目录 cd: path           os.chdir(‘..‘)                    # 返回上一级           os.system(‘bash cmd‘)             # 运行shell命令  

    4. 操作目录/文件       os.mkdir(‘dirname‘)                                   # 创建目录       os.rmdir(‘dirname‘)                                   # 删除目录(必须目录为空)       os.makedirs(‘dirname1/dirname2‘)                      # 递归创建目录       os.removedirs(‘dirname1/dirname2‘)                    # 递归删除目录(必须目录为空)

       os.listdir(‘dirname‘)                                 # 列出该目录下的所有文件, 返回列表       os.remove(‘filename‘)                                 # 删除文件       os.rename(‘old_name‘, ‘new_name‘)                     # 重命名文件/目录

    5. 应用      POSSIBLE_DIR = os.path.normcase(os.path.join(                    os.path.abspath(__file__),                    os.pardir,                    os.pardir,                    os.pardir      ))      sys.path.insert(0,POSSIBLE_DIR) 

    其他方法:          os.urandom(i)      # 生成i位随机二进制字符串        ‘‘‘ # os模块: 操作路径, 文件夹, 文件操作见I_O.py

‘‘‘sys: 操作系统    1. 属性:          sys.argv   # 是一个list, 用于存储命令参数 [module.py, p1, p2]           sys.path   # 是一个list, 用于存储modules的搜索路径    2. 方法:          sys.exit()               # 直接终止程序          sys.stdout.write(‘str‘)  # 写值到内存中          sys.stdout.flash()       # 刷新内存          ‘‘‘ # sys模块: 操作系统

‘‘‘logging: 日志模块         1. 配置日志文件            方式一: Config_file                  Config_file = {                     ‘filename‘: ‘test.log‘                                   # 日志文件名                     ‘filemode‘: ‘a/w‘                                        # 文件的打开方式: a追加, w重新写                     ‘format‘: ‘‘                                             # 日志格式                     ‘datefmt‘: ‘%Y年 %m月 %d日 %X时间(%H时 %M分 %S秒) %a星期‘   # 时间格式                     ‘level‘: logging.DEBUG                                   # 日志级别                  }                   logging.basicConfig(**Config_file)                  *‘format‘:                             %(asctime)s    # 日志时间, 可用datetime设置                            %(filename)s   # 调用日志的.py文件                            %(pathname)s   # .py文件的完整路径                            %(lineno)s     # .py文件的第几行调用日志                            %(levelname)s  # 日志级别                            %(message)s    # 日志内容

            方式二:  logger obj                            2> logger obj                      def logger():                             logger = logging.getLogger([‘Child_logger‘])

                             fh = logging.FileHandler(‘filename‘)               # 记录到文件                             sh = logging.StreamHandler()                       # 显示到屏幕

                             fmt = logging.Formatter(‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘)                             fh.setFormatter(fmt)                             sh.setFormatter(fmt)                  def logger():                        logger = logging.getLogger()            # 创建logger对象                         fh = logging.FileHandler(‘filename‘)    # 记录到文件                        sh = logging.StreamHandler()            # 记录到屏幕                        fmt = logging.Formatter(‘format‘)       # 定义日志格式                        fh.setFormatter(fmt)                    # 传入格式                        sh.setFormatter(fmt)                        logger.addHandler(fh)                   # 添加到logger对象                        logger.addHandler(sh)                        logger.setLevel(‘DEBUG‘)                # 设定日志等级                        return logger                           # 返回logger对象

         2. 记录日志:           logging/logger.debug(‘debug message‘)           logging/logger.info(‘info message‘)           logging/logger.warning(‘warning message‘)           logging/logger.error(‘error message‘)           logging/logger.critical(‘critical message‘)‘‘‘ # logging模块: 开发日志, 运维中的错误信息# import logging# Config_file = {#                ‘level‘:logging.DEBUG,#                ‘format‘:‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,#                ‘filename‘:‘test_log2.log‘,#                ‘filemode‘:‘w‘,#                ‘datefmt‘:‘%Y-%m-%d‘#                }# logging.basicConfig(**Config_file)# logging.debug(‘debug‘)# logging.info(‘info‘)# logging.warning(‘warning‘)# logging.error(‘error‘)# logging.critical(‘critical‘)

# import logging# def logger():#     logger = logging.getLogger()#     fh = logging.FileHandler(‘test_log‘)#     sh = logging.StreamHandler()##     fmt = logging.Formatter(‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘)#     fh.setFormatter(fmt)#     sh.setFormatter(fmt)##     logger.addHandler(fh)#     logger.addHandler(sh)#     logger.setLevel(logging.DEBUG)#     return logger## logger = logger()# logger.debug(‘hello‘)# logger.critical(‘critical‘)

‘‘‘hashlib: 方法一: MD5, 一个md5对象只能编码一个字符串               md5 = hashlib.md5()               md5.update(‘str‘.encode(‘utf8‘))               str_hash = md5.hexdigest()         # 返回摘要, 十六进制字符串               byte_hash = md5.digest()           # 返回摘要, 二进制

        方法二: sha1, sha224, sha256, sha384, sha512               sha = hashlib.sha256(‘key‘.encode(‘utf8‘))     # 生成时添加盐               sha.update(‘str‘.encode(‘utf8))                # 其余同md5

hmac: 方法一:     h = hmac.new(b‘key‘)                 h.update(b‘msg‘)方法二:     h = hmac.new(b‘key‘,b‘msg‘)                                             str_encode = h.hexdigest()         # 返回摘要, 十六进制字符串                 byte_hash = h.digest()             # 返回摘要, 二进制字符串                 True/False = hmac.compare_digest(b‘abc‘,b‘123‘)    # 比较两个二进制字符串是否相同‘‘‘ # 加密算法: hashlib(md5,sha), hmac

‘‘‘正则表达式:              1) 常规的: 写啥匹配啥              2) 元字符:                         1>  .     # 通用匹配符, 但只能代表一个字符                        2>  ^a    # 字符串必须以‘a‘开头                        3>  a$    # 字符串必须以‘a‘结尾                        4>  |     # 表示‘or‘

贪婪匹配: 按最多的来                        5>  d*     # [0,inf), 最少匹配空字符(字符串结尾的空字符也匹配), 最多匹配无穷多个‘d‘字符                        6>  d+     # [1,inf), 最少匹配一个‘d‘字符, 最多匹配无穷多个‘d‘字符                        7>  d?     # [0,1], 最少匹配空字符, 最多匹配一个‘d‘字符                        8>  d{n,m} # [n,m], 最少匹配n个‘d‘字符, 可设置上限为m个‘d‘字符

                        惰性匹配: 按最少的来                        9>  d*?   # 匹配空字符                        10>  d+?  # 匹配一个‘d‘字符 

                        字符集                        11> [abc]   # 字符集每一个字符都会依次匹配                            在字符集中:                                       -    # 从...到...                                      ^    # 取反\: 表示转义字符, 即将原来有特殊意义的字符变为没有特殊意义, 将原来有特殊意义的字符变为没有特殊意义                               在翻译字符时, python先解释, 再执行re模块的解释                               如:                                    (1)在正则表达式\b表示字符边界, 但‘\b‘在python中有特殊意义, 因此正则表达式应写为                                      r‘\\b‘                                   (2)正则表达式想表示‘\v‘,应写为                                      r‘\\\\v‘          常用字符集:                                      \d: [0-9]          \D: ^[0-9]                                      \s: [\t\n]         \S: ^[\t\n]                                      \w: [a-zA-Z0-9]    \W: ^[a-zA-Z0-9]      

分组                        12> (abc)          # 以整体匹配                        13> (?P<name>abc)  # 分组命名                        14> (?:abc)        # 去分组‘‘‘ # 正则表达式

‘‘‘re:     1. 方法:查找:           1) re.findall(r‘‘, ‘strs‘)                       # 返回一个list, 包含所有满足正则表达式的结果           2) ret = re.search(r‘‘, ‘strs‘)                  # 返回分组,  搜索匹配, 只匹配一个           3) ret = re.match(r‘‘, ‘strs‘)                   # 返回分组, 从头开始匹配, 只匹配一个           4) ret_iter = re.finditer(r‘‘, ‘strs‘)           # 返回一个iterator, 匹配所有, 每一项是分组           * 对于返回分组的取值:             ret.group()         # 获取全部分组             ret.group(i)         # 获取第i个分组, i从1开始

           修改:              5) re.split(r‘‘, ‘strs‘)       # 返回list, 按正则表达式对‘strs‘进行字符串分割, 同str.split()           6) re.sub(r‘‘,‘str1‘,‘str2‘)   # 返回str, 按正则表达式搜索‘str2‘,将第一次匹配到的字符替换为‘str1‘           7) re.subn(r‘‘,‘str1‘,‘str2‘)  # 返回(new_str,n), 按正则表达式搜索‘str2‘,将所有匹配到的字符替换为‘str1‘

制作re对象: 可调用所有re方法           8) re_operator = re.compile(r‘‘)                                            ‘‘‘ # re模块

‘‘‘json & pickle:     1. json: 序列化为字符串             1)能json序列化的: 基本数据类型, list, tuple, dict             2) 操作:                    1> 序列化                          data_json = json.dumps(data)                          # 直接序列化                          with open(‘filename‘,‘w‘,encoding=‘utf8) as f:                             json.dump(data,f)                                  # 序列化存入文本                    2> 读取                          data = json,loads(data_json)                          with open(‘filename‘,‘r‘, encoding=‘utf8‘) as f:                             data = json.load(f)         

    2. pickle: 序列化为二进制文件, 仅python能用       1) 能序列化的类型: 基本数据类型, list, tuple, dict, set, obj       2) 操作:              1> 序列化                    data_pickle = pickle.dumps(data)                    with open(‘filename‘,‘wb‘) as f:                         pickle.dump(data)              2> 读取                    data = pickle.loads(data_pickle)                    with open(‘filename‘,‘rb‘) as f:                         pickle.load(f)                                                                       ‘‘‘ # json & pickle: 序列化

‘‘‘xml: 操作xml文件 import xml.etree.ElementTree as ET     1. 特点:              1) 基于节点对象操作             2) 每一个节点有如下属性:                 node.tag        # ‘str‘ 节点名                 node.attrib     # dict = {‘attr‘:‘value‘} 节点属性值                 node.text       # ‘str‘ 节点值     2. 操作:            1) 生成xml文件               father_node = ET.Element(‘father_node‘)                                      # 生成父节点               child_node = ET.SubElement(‘father_node‘,‘child_node‘,attrib={‘attr‘:value}) # 生成子节点               child_node.text = ‘str‘               et = ET.ElementTree(father_node)                                 # 生成document对象               et.write(‘filename.xml‘,encoding=‘utf8‘,xml_declaration=True)    # 生成xml

            2) 访问xml文件                tree = ET.parse(‘filename.xml‘)                               # 获取document对象                root = tree.getroot()                                         # 获取根节点                1> 遍历                      for child in root:            # child也是一个节点对象, 若要获取内部元素要继续遍历                2> 搜索                      node.findall(‘node_name‘)     # 在node的内部子节点中搜索所有node_name                      node.find(‘node_name‘)        # 在node的内部子节点中搜索一个node_name                      node.getchildren()            # 获取node的所有子节点                3> 重写                      node.tag = new_tag                         node.attrib = {‘attr‘:‘attr_value‘}                      node.text = new_value                      tree.write(‘filename.xml‘)    # 重新生成xml文件                4>> 删除                      node.remove(node obj)         # 删除子节点‘‘‘ # xml模块

‘‘‘configparser: 1. DEFINE: Generate config file                                [DEFAULT]                                ServerAliveInterval = 45                                Compression = yes                                CompressionLevel = 9                                ForwardX11 = yes

                                [bitbucket.org]                                User = hg

                                [topsecret.server.com]                                Port = 50022                                ForwardX11 = no              2. OPERATE: Base on dict                          1.Generate config file:                                config = configparser.ConfigParser()          # Generate config obj                                config["DEFAULT"] = {‘ServerAliveInterval‘: ‘45‘,                                                      ‘Compression‘: ‘yes‘,                                                      ‘CompressionLevel‘: ‘9‘}                                config[‘bitbucket.org‘] = {‘User‘:‘hg‘}                                config[‘topsecret.server.com‘] = {‘Port‘: ‘50022‘, ‘ForwardX11‘:‘no‘}

                                with open(‘filename‘,‘w‘) as f:                                   config.write(f)

                          2. Operate as a dict:                             1> GET                                config.read(‘filename‘)                      # Load                                config[section_name][attr_name]              # Get info                                config.sections()                            # Return a List, includes all sections except [DEFAULT]                                config.options(section_name)                 # Return a list, includes all attr_name of ‘section_name‘ and [DEFAULT]                                config.items(section_name)                   # Return a tuple, includes all items of ‘section_name‘ and [DEFAULT]

                             2> Add                                config.add_section(new_section)                                config.set(new_section,attr,value)                             3> Rewrite                                config[section_name][attr_name] = new_value                             4> Delete                                config.remove_section(section_name)                                config.remove_option(section_name,attr)                                with open(‘filename‘,‘w/a‘) as f:                                   config.write(f)‘‘‘ # configparser模块: 配置文件

‘‘‘StringIO and ByteIO: StringIO                      1. f = io.StringIO(‘ ‘) <--> f.read(), f.readline(), for item in f:                     2. f = io.StringIO()                        f.write(‘ ‘)    <-->  f.getvalue()

                    BytesIO                    1. f = io.BytesIO(b‘ ‘)   <--> f.read(), f.readline(), for item in f:                    2. f = io.BytesIO()                       f.write(b‘ ‘)  <--> f.getvalue()‘‘‘ # StringIO, ByteIO

# 下一章: ObjectOrientProgramming.py

# from io import StringIO# f = StringIO(‘‘‘John loves Cindy, but he never told her.# What a pity thing!# But he thinks it‘s a pure love.# ‘‘‘)# for item in f:#     print(item)

## f = StringIO()# f.write(‘‘‘John loves Cindy, but he never told her.# What a pity thing!# However, he thinks it‘s a pure love.# ‘‘‘)# data = f.getvalue()# print(data)

# from io import BytesIO# f = BytesIO(‘‘‘# John loves Cindy, but he never told her.# What a pity thing!# However, he thinks it‘s a pure love.# ‘‘‘.encode(‘utf-8‘))## for item in f:#     print(item.decode(‘utf-8‘))

# f = BytesIO()# f.write(b‘‘‘John loves Cindy, but he never told her.# What a pity thing!# However, he thinks it‘s a pure love.# ‘‘‘)## data = f.getvalue().decode(‘utf-8‘)# print(data)

原文地址:https://www.cnblogs.com/lancelotxly/p/10837778.html

时间: 2024-10-28 12:55:44

python基本知识(六):模块的相关文章

python基础知识六 文件的基本操作+菜中菜

基础知识六 文件操作 ? open():打开 ? file:文件的位置(路径) ? mode:操作文件模式 ? encoding:文件编码方式 ? f :文件句柄 f = open("1.txt",mode = 'r',encoding = 'utf-8') print(f.read()) f.close 1.文件操作模式: ? r,w,a(重要) ? rb,wb,ab(次要) ? r+,w+,a+ 1.1 r/w/a 1. r操作: f = open('1.txt','r') pri

python基础知识9——模块2——常见内置模块

内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: 1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platf

python基础知识8——模块1——自定义模块和第三方开源模块

模块的认识 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 如:os 是系统相关的模块:file是文件操作相关的模块 模块分为三种: 自定义模块 内置模块 第三方开源模块 自定义模块 1.定义模块 2.导入模块 Python之所以应用越来越广泛,在一定程度上也

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

Python第十六课(模块3)

Python第十六课(模块3)    >>>思维导图>>>中二青年 模块与包 模块 """ 三种来源 1.内置的 2.第三方的 3.自定义的 四种表示形式 1.py文件(******) 2.共享库 3.文件夹(一系列模块的结合体)(******) 4.C++编译的连接到python内置的 """ 导入模块 """ 先产生一个执行文件的名称空间 1.创建模块文件的名称空间 2.执行模

python基础知识 01 python模块

Python基础知识 (1)python模块(2)如何声明python变量(3)进制转换(4)格式化数字(5)单行注释和多行注释(6)单引号和双引号字符串(7)拼接字符串(8)长字符串 第一课:python模块 python模块 = 封装了API的library 我们先不讲如何定义模块 ,我们先讲如何引用模块 模块分为2类 1.python自身提供的模块 2.自定义模块 //这两种方法呢,我们引用的方式是一样的 引用模块的关键字为import 这个和Java的引用方式是一样的,但是 有很大的区别

Python学习(六)模块

Python 模块 模块定义 随着程序越来越庞大,需要分隔成几个文件:也需要能在不同文件中复用函数.类和变量,而不是拷贝代码.为了满足这些需要,Python提供了模块. 简单地说,模块就是一个保存了Python代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块是包括Python定义和声明的文件.文件名就是模块名加上  .py 后缀.(目前使用Notepad++ 学习而保存的 .py 文件即为模块) 模块的模块名(作为一个字符串)可以由全局变量 __name __ 得到. 例

Python学习笔记(六)再谈Python模块

Python程序包含多个模块文件,一个主体.顶层文件实现主要控制流程.调用组件和工具,其他模块文件则提供组件和工具,python自带了许多实用的模块称为标准链接库.模块是python中最高级别的程序组织单元,将代码和数据封装起来以便重用.每一个文件都是一个模块,并且可以通过"导入"来使用其他模块的变量(顶层定义的所有变量).模块被导入时就生成了一个模块对象.从抽象的角度看,模块的作用有: 1)代码重用-模块文件的代码可以永久保存,可以被多个客户端使用.任意的重新运行和重载 2)划分系统

python 小白(无编程基础,无计算机基础)的开发之路 辅助知识2 模块

一.模块和命名空间 一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起.每个模块文件是一个独立完备的变量包,即一个命名空间.一个模块文件不能看到其他文件定义的变量名,除非它显示地导入了那个文件,所以模块文件在代码文件中起到了最小化命名冲突的作用.因为每个文件都是一个独立完备的命名空间,即使在他们拼写相同的情况下,一个文件的变量名是不会与另一个文件中的变量冲突的. 注意:import VS from:应该指出,from语句在某种意义上战胜了模块的名称空间分割的目的,因