51学通信论坛2017新版

标题: 1.7 标准模块(库)基础 [打印本页]

作者: 爱卫生    时间: 2017-12-12 14:38
标题: 1.7 标准模块(库)基础
本帖最后由 爱卫生 于 2017-12-12 16:04 编辑

Python自带了很多模块(库),也就是别人已经写好的python程序,可以直接调用。这样可能只有几行就可以实现非常复杂的功能。
模块又分标准库和第三方库。标准库是不需要额外安装的,是根据python安装好就有的。
1.3 用户交互程序(双引号、单引号、三引号、用户输入与格式化)这篇文章中,就用到了getpass这个模块,直接通过import来调用,然后通过getpass.getpass方法来使用该模块的功能。这些标准模块大部分是在C:\Python3.5\Lib这个目录下的。注:C:\Python3.5为python的安装目录。而第三方库则是放在site-packages子目录下的。
下面来学习基本的python模块的使用方法。
1 sys模块
1.1)打印系统所在的路径
源码:
  1. import sys
  2. print(sys.path)
复制代码
结果:
  1. c:\Python3.5
复制代码
1.2)打印该py文件所处的相对路径
源码:
  1. import sys
  2. print(sys.argv)
复制代码
结果:
  1. ’y:/python demo/module.py'
复制代码

2 os模块
os模块用于和操作系统的交互。
2.1)调用操作系统的命令:os.system
以windows的dir为例,linux类推为ls等。源码:
  1. import os
  2. os.system("dir")
复制代码
输出结果:
  1. Volume in drive Y is work
  2. Volume Serial Number is 3A56-73A9

  3. Directory of Y:\python demo
  4. 03/22/2017  03:54 AM             1,768 3level_menus.py
  5. 03/22/2017  03:54 AM             1,621 dictionary.py
复制代码
上述效果相当于在windows的cmd窗口中执行了dir命令一样。不过system方法被逐渐淘汰了,还有更好的方法被替代。

2.2)os.system方法的不足
现在,我们想把结果存到一个变量里。尝试以下代码。
源码:
  1. import os
  2. abc = os.system("ping baidu.com")
  3. print("result is:",abc)
复制代码
结果:
  1. C:\Python3.5\python.exe "Y:/python code demo/1.py"

  2. Pinging baidu.com [220.181.57.217] with 32 bytes of data:
  3. Reply from 220.181.57.217: bytes=32 time=69ms TTL=42
  4. Reply from 220.181.57.217: bytes=32 time=78ms TTL=42
  5. Reply from 220.181.57.217: bytes=32 time=68ms TTL=42
  6. Reply from 220.181.57.217: bytes=32 time=69ms TTL=42

  7. Ping statistics for 220.181.57.217:
  8.     Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
  9. Approximate round trip times in milli-seconds:
  10.     Minimum = 68ms, Maximum = 78ms, Average = 71ms
  11. result is: 0
复制代码
请注意,结果的最后一行有一个0,这个代表调用的系统命令是一次性的,直接输出在屏幕上,执行完就释放了,所以实际上没有保存到变量abc中。系统自动加一个0来表示命令成功执行与否的状态码。
linux上0代表成功。windows也是一样的,0就代表命令执行成功了。

也就是说,os.system方法只执行命令,并不会保存结果。如果需要保存结果到变量中,则要用到os.popen方法。

2.3)用os.popen方法保存执行的命令结果
源码
  1. import os
  2. abc = os.popen("ping baidu.com")
  3. print("result is:",abc)
复制代码
执行结果:
  1. C:\Python3.5\python.exe "Y:/python code demo/1.py"
  2. result is: <os._wrap_close object at 0x000000000133B9E8>
复制代码
请注意最后一行object at 0x。。。33B9E8就是保存以后的变量在内存中的地址。

但我们想要的不是内存地址,而是一个可读的结果,那就要改进一下。加入read子方法。
  1. import os
  2. abc = os.popen("ping baidu.com").read()
  3. print("result is:",abc)
复制代码
结果:
  1. C:\Python3.5\python.exe "Y:/python code demo/1.py"
  2. result is:
  3. Pinging baidu.com [123.125.114.144] with 32 bytes of data:
  4. Request timed out.
  5. Reply from 123.125.114.144: bytes=32 time=230ms TTL=42
  6. Reply from 123.125.114.144: bytes=32 time=168ms TTL=42
  7. Request timed out.

  8. Ping statistics for 123.125.114.144:
  9.     Packets: Sent = 4, Received = 2, Lost = 2 (50% loss),
  10. Approximate round trip times in milli-seconds:
  11.     Minimum = 168ms, Maximum = 230ms, Average = 199ms
复制代码
2.4)用os.makedir方法创建一个新的文件夹
源码
  1. import os
  2. abc = os.makedirs("new")
  3. print("result is:",abc)
复制代码
执行后将在当前路径下创建一个新的文件夹new。



3 创建第三方模块。并被其他python程序调用
步骤:
1)将前面的任意源码保存为py文件。例如将2.4创建文件夹源码保存为new_dir.py。
2)新建一个py文件,输入import new_dir.py就可以调用这个模块了。现在你已经创建了一个第三方模块,模块名就叫new_dir。



自定义的第三方模块,系统会自动从程序的当前目录去找,然后再从os.path指明的系统路径(全局环境变量)下去找。如果都找不到,就会提示模块找不到的错误。
如果要修复的话,方法有两种:
1)可以将这个第三方模块复制到C:\Python3.5\Lib\site-packages目录下。
或 2)修改环境变量,加入新的自定义的第三方模块保存路径。





欢迎光临 51学通信论坛2017新版 (http://bbs.51xuetongxin.com/) Powered by Discuz! X3