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)打印系统所在的路径
源码:
import sys
print(sys.path)
复制代码
结果:
c:\Python3.5
复制代码
1.2)打印该py文件所处的相对路径
源码:
import sys
print(sys.argv)
复制代码
结果:
’y:/python demo/module.py'
复制代码
2 os模块
os模块用于和操作系统的交互。
2.1)调用操作系统的命令:os.system
以windows的dir为例,linux类推为ls等。源码:
import os
os.system("dir")
复制代码
输出结果:
Volume in drive Y is work
Volume Serial Number is 3A56-73A9
Directory of Y:\python demo
03/22/2017 03:54 AM 1,768 3level_menus.py
03/22/2017 03:54 AM 1,621 dictionary.py
复制代码
上述效果相当于在windows的cmd窗口中执行了dir命令一样。不过system方法被逐渐淘汰了,还有更好的方法被替代。
2.2)os.system方法的不足
现在,我们想把结果存到一个变量里。尝试以下代码。
源码:
import os
abc = os.system("ping baidu.com")
print("result is:",abc)
复制代码
结果:
C:\Python3.5\python.exe "Y:/python code demo/1.py"
Pinging baidu.com [220.181.57.217] with 32 bytes of data:
Reply from 220.181.57.217: bytes=32 time=69ms TTL=42
Reply from 220.181.57.217: bytes=32 time=78ms TTL=42
Reply from 220.181.57.217: bytes=32 time=68ms TTL=42
Reply from 220.181.57.217: bytes=32 time=69ms TTL=42
Ping statistics for 220.181.57.217:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 68ms, Maximum = 78ms, Average = 71ms
result is: 0
复制代码
请注意,结果的最后一行有一个0,这个代表调用的系统命令是一次性的,直接输出在屏幕上,执行完就释放了,所以实际上没有保存到变量abc中。系统自动加一个0来表示命令成功执行与否的状态码。
linux上0代表成功。windows也是一样的,0就代表命令执行成功了。
也就是说,os.system方法只执行命令,并不会保存结果。如果需要保存结果到变量中,则要用到
os.popen
方法。
2.3)用os.popen方法保存执行的命令结果
源码
import os
abc = os.popen("ping baidu.com")
print("result is:",abc)
复制代码
执行结果:
C:\Python3.5\python.exe "Y:/python code demo/1.py"
result is: <os._wrap_close object at 0x000000000133B9E8>
复制代码
请注意最后一行object at 0x。。。33B9E8就是保存以后的变量在内存中的地址。
但我们想要的不是内存地址,而是一个可读的结果,那就要改进一下。加入read子方法。
import os
abc = os.popen("ping baidu.com").read()
print("result is:",abc)
复制代码
结果:
C:\Python3.5\python.exe "Y:/python code demo/1.py"
result is:
Pinging baidu.com [123.125.114.144] with 32 bytes of data:
Request timed out.
Reply from 123.125.114.144: bytes=32 time=230ms TTL=42
Reply from 123.125.114.144: bytes=32 time=168ms TTL=42
Request timed out.
Ping statistics for 123.125.114.144:
Packets: Sent = 4, Received = 2, Lost = 2 (50% loss),
Approximate round trip times in milli-seconds:
Minimum = 168ms, Maximum = 230ms, Average = 199ms
复制代码
2.4)用os.makedir方法创建一个新的文件夹
源码
import os
abc = os.makedirs("new")
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