python 模块

python的模块分为2种:

1.标准库(不需要安装,直接导入就可以使用的)

2.第三方库(必须要手动安装的)

先来介绍2个标准库:sys和os

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

import sys
#打印环境变量
print(sys.path)

执行结果如下:

['E:\\python_script', 'E:\\python_script', 'C:\\Program Files\\Python36\\python36.zip', 'C:\\Program Files\\Python36\\DLLs', 'C:\\Program Files\\Python36\\lib', 'C:\\Program Files\\Python36', 'C:\\Program Files\\Python36\\lib\\site-packages']

这打印的,就是python的全局环境变量。这里面都是路径,路径里面存的都是什么呢?就是python导入一个库或者python内部自己进行调用的时候,它就在这些路径里面去找。

比如导入一个模块sys,那么sys模块必须在这些目录之中,至少存在一个目录里面。如果不存在,就会提示找不到该模块。

存在,就直接加载进来。

python标准库在 python安装路径\lib目录下,里面有N多.py结尾的文件,比如re模块,就是re.py

python第3方库一般存在 python安装路径\lib\site-packages 比如:

C:\Program Files\Python36\Lib\site-packages

比如Django,会存在这个目录里面。

我安装的是最新版Django,截图如下:

sys.argv是用来获取命令行参数的,

直接输出sys.argv

print(sys.argv)

结果如下:

['E:/python_script/a.py']

在Pycharm里面执行,它会输出绝对路径。

在cmd里面,进入脚本目录,再次执行。它输出的是相对路径

接收3个变量

e:\python_script>python a.py zhang li wang
['a.py', 'zhang', 'li', 'wang']

输出的结果是一个列表,列表的概念,后续会讲到。

服务器有些脚本,执行的时候,需要加参数。那么就需要用sys.argv来接收参数,程序做判断就可以了。

sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始。

比如想输出li

代码改成如下:

print(sys.argv[2])

在cmd里面执行

e:\python_script>python a.py zhang li wang
li

sys模块暂时先讲到这里,下面来讲os模块

os模块主要是操作系统相关的,比如查看系统负载状态,磁盘,创建文件。。。。

__author__ os
os.system

执行结果如下:

把dir执行的结果赋值给一个变量,输出时,带一个标记。代码如下:

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

import os

#执行命令,不保存结果
cmd_res = os.system("dir")
print("-->",cmd_res)

执行结果如下:

可以看出结果是0

为什么是0呢?而不是文件列表呢?

os.system在执行的时候,是直接输出到屏幕了。

执行成功返回0,失败返回1。

如果想要输出文件列表,怎么办呢?

需要用到os.popen

os.popen() 方法用于从一个命令打开一个管道。

执行的结果是一个对象,存储在内存中。需要用read()才能读取,代码如下:

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

import os

cmd_res = os.popen("dir").read()
print("-->",cmd_res)

执行结果如下:

创建一个文件夹new_dir,代码如下:

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

import os

os.mkdir("new_dir")

执行之后,在Pycharm编辑器左上角,会出现一个目录

导入自定义的模块

这里介绍一个,最简单的用户登录模块

在同级目录下,创建文件login.py,代码如下:

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

import getpass

_username = "xiao"
_password = "xiao123"
username = input("username:")
#password = getpass.getpass("password:")
password = input("password:")
print(username,password)

if _username == username and _password == password:
    print("Welcome user {name} login...".format(name=username))
else:
    print("Invalid username or password!")

创建文件a.py,代码如下:

import login

执行文件a.py,效果如下:

注意:

在同级目录下,直接import 文件名,去掉后缀.py。就可以实现自定义的模块调用了。

现在我把login.py移动到new_dir目录下

再次运行a.py,就会报错

ModuleNotFoundError: No module named 'login'

首先,python 导入模块的时候,优先从当前目录中寻找文件login.py。如果不存在,会在环境变量中的文件中搜索。最后发现不存在时,提示 No module

这个问题,有3个解决办法:

1.把模块放到同级目录(不推荐)

2.把模块放到环境变量的其中一个目录(不推荐)

3.把new_dir目录,加入到环境变量中(推荐,这个后续会讲到)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Ken的杂谈

CentOS 7 下RabbitMQ 3.7 安装与配置

https://ken.io/note/centos7-erlang-install

1.1K4
来自专栏好好学习吧

Windows 7 下使用gitblit + git 搭建小组内文件版本控制环境

使用前先看下GitBlit的百科介绍,很简洁:需要java运行环境;是一个纯 Java 库用来管理、查看和处理Git 资料库。即一个基于Java的分布式版本控制...

1.7K3
来自专栏蓝天

检测Linux系统是否支持某系统调用

check_syscall.zip 随内核版本的变化,会增加一些新的系统调用,但如果glibc没有跟上,则不能直接调用,这个时候可以自己包装一下。如果想知道内...

883
来自专栏王磊的博客

asp.net mvc3.0第一个程序helloworld开发图解

步骤一:新建asp.net mvc3.0项目 ? ? (选择Razor模板) 步骤二:创建控制器 ? ? 步骤三:控制器源码内右键创建对应视图 ? ? 步骤四:...

3396
来自专栏有困难要上,没有困难创造困难也要上!

运行CrossWalk报错:计算机中丢失 api-ms-win-core-winrt-string-l1-1-0.dll

6147
来自专栏北京马哥教育

程序包编译安装

一、几个概念 1、开放源码 程序代码,人类可能读懂的程序语言,但是计算机不能识别和执行; 2、编译程序 将程序...

2797
来自专栏左瞅瞅,右瞅瞅

Centos 7升级原python 2.7.5至Python 3.7

因为yum的功能依赖Pyhon2,现在更改默认Python版本后会导致yum无法正常工作,所以进行以下修复

2403
来自专栏河湾欢儿的专栏

nginx服务的快速搭建(跨域)

原文地址https://github.com/gs3170981/nginx_quick 1.下载以后有一个server.js 文件

1081
来自专栏Java学习123

DOS批处理中%cd%和%~dp0的区别

2193
来自专栏jianhuicode

NPM依赖包版本号~和^的区别及最佳实践

~会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0 ^会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的...

882

扫码关注云+社区

领取腾讯云代金券