机器人 救救瓜
Toggle navigation
Home
SCM-tool
Linux
Jenkins
SVN
other
About Me
Archives
Tags
python 笔记之 模块
2021-03-10 17:11:30
1249
0
0
gua_l
### 使用模块 模块是为了用来下定义和重用的。 导入放在c:/python 下的hello.py 作为模块使用。模块导入只导入一次,第二次什么也不会发生,打破互相导入的死循环。如果一定要重新加载模块,使用importlib.reload() ``` >>> import sys >>> sys.path.append('C:/python') >>> import hello Hello, world! ``` 查看系统查找的全部路径有什么,除了sys.path , 标准做法是将模块所在的目录包含在环境变量PYTHONPATH中。 ``` >>> import sys, pprint >>> pprint.pprint(sys.path) ['C:\\Python35\\Lib\\idlelib', 'C:\\Python35', 'C:\\Python35\\DLLs', 'C:\\Python35\\lib', 'C:\\Python35\\lib\\plat-win', 'C:\\Python35\\lib\\lib-tk', 'C:\\Python35\\lib\\site-packages'] ``` 包含测试代码的模块,应该将代码放入if 条件中 ``` if __name__ == '__main__': test() ``` ### 使用包 模块存储在扩展名为.py的文件中,而包则是一个目录。要被Python视为包,目录必须包含文件__init__.py。如果像普通模块一样导入包,文件__init__.py的内容就将是包的内容。 ### 模块包含什么 #### dir 要查明模块包含哪些东西,可使用函数dir,它列出对象的所有属性(对于模块,它列出所有的函数、类、变量等)。 ``` [i for i in dir(copy) if not i.startswith("_")] ['Error', 'copy', 'deepcopy', 'dispatch_table', 'error'] ``` #### all ``` >>> copy.__all__ ['Error', 'copy', 'deepcopy'] ``` all 的设置是在模块copy 是定义的 ```__all__ = ["Error", "copy", "deepcopy"] ``` 旨在定义模块的公有接口。具体地说,它告诉解释器从这个模块导入所有 的名称意味着什么。因此,如果你使用如下代码: ```from copy import * ``` 将只能得到变量__all__中列出的几个函数。要使用其他不在all 中列出的函数,必须显性地导入。 #### help 用help 查看模块中的函数: ``` >>>help(copy.copy) Help on function copy in module copy: copy(x) Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. ``` 这些通过help 打印出来的,就是在copy模块中定义copy()函数时写的文档字符串 ``` def copy(x): """Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. """ ``` 用help 查看模块: 显示的会是定义在模块文件中的 文档字符串 类classes 函数FUNCTIONS DATA FILE位置 ``` CLASSES FUNCTIONS DATA __all__ = ['Error', 'copy', 'deepcopy'] FILE c:\users\lte-lcfeng\appdata\local\programs\python\python37\lib\copy.py ``` 查看模块源代码 ``` print(copy.__file__) C:\Users\L\AppData\Local\Programs\Python\Python37\lib\copy.py ``` ### 模块 sys 模块sys中一些重要的函数和变量 |函数/变量 |描 述 | |:---------|---------| |argv |命令行参数,包括脚本名| |exit([arg]) |退出当前程序,可通过可选参数指定返回值或错误消息| |modules| 一个字典,将模块名映射到加载的模块| |path |一个列表,包含要在其中查找模块的目录的名称| |platform| 一个平台标识符,如sunos5或win32| |stdin |标准输入流——一个类似于文件的对象| |stdout |标准输出流——一个类似于文件的对象| |stderr| 标准错误流——一个类似于文件的对象| ### 模块 OS 模块os中一些重要的函数和变量 |函数/变量 |描 述| |----------|---| |environ| 包含环境变量的映射| |system(command)| 在子shell中执行操作系统命令| |sep| 路径中使用的分隔符| |pathsep |分隔不同路径的分隔符| |linesep |行分隔符('\n'、'\r'或'\r\n')| |urandom(n) |返回n个字节的强加密随机数据| ### 模块fileinput 模块fileinput中一些重要的函数 |函 数 |描 述| |-|-| |input([files[, inplace[, backup]]]) |帮助迭代多个输入流中的行 |filename()| 返回当前文件的名称 |lineno()|返回(累计的)当前行号 |filelineno() |返回在当前文件中的行号 |isfirstline() |检查当前行是否是文件中的第一行 |isstdin()| 检查最后一行是否来自sys.stdin |nextfile() |关闭当前文件并移到下一个文件 |close() |关闭序列 末尾添加行号的例子 ``` import fileinput import sys myfile = sys.argv[1] for i in fileinput.input(files=myfile,inplace=False): n = fileinput.lineno() i = i.rstrip() header_fmt = '{:<50} #{:2d}' print(header_fmt.format(i, n)) ``` ### 模块 集合set ,堆 heap , 双端队列 集合是由内置类set实现的,这意味着你可直接创建集合,而无需导入模块sets。 ``` >>> set(range(10)) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ``` 可使用序列(或其他可迭代对象)来创建集合,也可使用花括号显式地指定。请注意,不能仅使用花括号来创建空集合,因为这将创建一个空字典。集合主要用于**成员资格**检查,因此将忽略重复的元素。 ### 模块 time Python日期元组中的字段 |索 引| 字 段| 值| |-|-|-| |0 |年| 如2000、2001等 |1 |月| 范围1~12 |2 |日| 范围1~31 |3 |时| 范围0~23 |4 |分| 范围0~59 |5 |秒| 范围0~61 |6 |星期| 范围0~6,其中0表示星期一 |7 |儒略日| 范围1~366 |8 |夏令时| 0、1或-1 模块time中一些重要的函数 |函 数 |描 述| |-|-| |asctime([tuple])| 将时间元组转换为字符串 |localtime([secs])| 将秒数转换为表示当地时间的日期元组 |mktime(tuple) |将时间元组转换为当地时间 |sleep(secs) |休眠(什么都不做)secs秒 |strptime(string[, format]) |将字符串转换为时间元组 |time()| 当前时间(从新纪元开始后的秒数,以UTC为准) ### random 模块random中一些重要的函数 |函 数| 描 述| |-|-| |random()| 返回一个0~1(含)的随机实数 |getrandbits(n)| 以长整数方式返回n个随机的二进制位 |uniform(a, b)| 返回一个a~b(含)的随机实数 |randrange([start], stop, [step]) |从range(start, stop, step)中随机地选择一个数 |choice(seq) |从序列seq中随机地选择一个元素 |shuffle(seq[, random]) |就地打乱序列seq |sample(seq, n)| 从序列seq中随机地选择n个值不同的元素 ### shelve 和 json ### 正则表达式 模块 re #### 通配符 句点只与一个字符匹配,而不与零或两个字符匹配。 转义 对字符串中的引号进行转义时所做的那样,在它前面加上一个反斜杠。用模式'python\\.org',它只与'python.org'匹配。 为表示模块re要求的单个反斜杠,需要在字符串中书写两个反斜杠,让解释器对其进行转义。换而言之,这里包含两层转义:解释器执行的转义和模块re执行的转义。实际上,在有些情况下也可使用单个反斜杠,让解释器自动对其进行转义,但请不要这样依赖解释器。如果你厌烦了两个反斜杆,可使用原始字符串,如r'python\.org'。 #### 字符集 '[a-zA-Z0-9]'与大写字母、小写字母和数字都匹配。请注意,**字符集只能匹配一个字符**。要指定排除字符集,可在开头添加一个^字符,例如'[^abc]'与除a、b和c外的其他任何字符都匹配。 #### 二选一和子模式 表示二选一的特殊字符:管道字符(|)。所需的模式为'python|perl'。 #### 可选模式和重复模式 通过在子模式后面加上问号,可将其指定为可选的,即可包含可不包含。例如, ``` r'(http://)?(www\.)?python\.org' 只与下面这些字符串匹配: 'http://www.python.org' 'http://python.org' 'www.python.org' 'python.org' ``` #### 可重复多次 (pattern)*:pattern可重复0、1或多次。 (pattern)+:pattern可重复1或多次。 (pattern){m,n}:模式可从父m~n次。 #### 字符串的开头和末尾 ^ $ #### 模块re中一些重要的函数 |函 数 |描 述| |:--------------------|:--------------| |compile(pattern[, flags]) |根据包含正则表达式的字符串创建模式对象 |search(pattern, string[, flags]) |在字符串中查找模式 |match(pattern, string[, flags]) |在字符串开头匹配模式 |split(pattern, string[, maxsplit=0]) |根据模式来分割字符串 |findall(pattern, string) |返回一个列表,其中包含字符串中所有与模式匹配的子串 |sub(pat, repl, string[, count=0]) |将字符串中与模式pat匹配的子串都替换为repl |escape(string)| 对字符串中所有的正则表达式特殊字符都进行转义 #### re.sub ,re.compile , 编组n 结合 的匹配和替换 '*something*'替换为'<em>something</em>',其中前者是在纯文本文档(如电子邮件)中表示突出的普通方式,而后者是相应的HTML代码(用于网页中)。下面先来创建一个正则表达式。 ``` >>> emphasis_pattern = r'\*([^\*]+)\*' ``` 要让正则表达式更容易理解,一种办法是在调用模块re中的函数时使用标志VERBOSE。下述代码创建的模式对象与emphasis_pattern等价,但使用了VERBOSE标志: ``` >>> emphasis_pattern = re.compile(r''' ... \* # 起始突出标志——一个星号 ... ( # 与要突出的内容匹配的编组的起始位置 ... [^\*]+ # 与除星号外的其他字符都匹配 ... ) # 编组到此结束 ... \* # 结束突出标志 ... ''', re.VERBOSE) ... ``` 创建模式后,就可使用re.sub来完成所需的替换了。成功地将纯文本转换成了HTML代码。 ``` >>> re.sub(emphasis_pattern, r'<em>\1</em>', 'Hello, *world*!') 'Hello, <em>world</em>!' ``` **重复运算符+**默认是贪婪的,这意味着它们将匹配尽可能多的内容。 模式: ``` >>> emphasis_pattern = r'\*(.+)\*' >>> re.sub(emphasis_pattern, r'<em>\1</em>', '*This* is *it*!') '<em>This* is *it</em>!' ``` 如你所见,这个模式匹配了从第一个星号到最后一个星号的全部内容,其中包含另外两个星号!这就是贪婪的意思:能匹配多少就匹配多少。 对于所有的重复运算符,都可在后面**加上问号**来将其指定为非贪婪的。 ``` >>> emphasis_pattern = r'\*\*(.+?)\*\*' >>> re.sub(emphasis_pattern, r'<em>\1</em>', '**This** is **it**!') '<em>This</em> is <em>it</em>!' ``` **这里使用的是运算符+?而不是+**。这意味着与以前一样,这个模式将匹配一个或多个通配符,但匹配尽可能少的内容,因为它是非贪婪的。
Pre:
python 笔记之 文件操作
Next:
python 笔记之 文档字符串,收集关键字参数,作用域嵌套, 递归,异常
0
likes
1249
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.