Python-常用模块
Python 常用包、模块
python交互解释器查看有哪些module
help(“modules”)
>>> help("modules")
Please wait a moment while I gather a list of all available modules...
BaseHTTPServer binhex iniparse sched
Bastion bisect inspect select
Python2 SimpleHTTPServer
python2 自带了一个 web 服务器 SimpleHTTPServer
我们可以很简单地输入下面的命令来启动 web 服务器,提供一个文件浏览的 web 服务。
python -m SimpleHTTPServer
然后在浏览器输入 http://localhost:8000
就可以看到当前目录下的所有目录和文件了。
即默认端口为8000,可以加参数指定端口,例如:
python -m SimpleHTTPServer 8080
更复杂的用法直接可以看 python 的文档:http://docs.python.org/library/simplehttpserver.html
此外这样启动的 http 服务器在 ctrl+c 后就停止了,可以加参数 &
使之在后台运行:
python -m SimpleHTTPServer &
生成的新的进程为当前 bash 的子进程,所以,当我们关闭当前 bash 时,相应的子进程也会被 kill 掉,这也不是我们想要的结果。
在命令的开头加一个 nohup,忽略所有的挂断信号,如果当前 bash 关闭,则当前进程会挂载到 init 进程下,成为其子进程,这样即使退出当前用户,其 8000 端口也可以使用。
nohup python -m SimpleHTTPServer 8000 &
Python3 http.server
Python3 中的写法 python3 -m http.server 8000
Python2 的 BaseHTTPServer 模块已被合并到 Python 3 的 http.server 模块中。当将源代码转换为 Python 3 时 2to3 工具将自动适应导入。
基于SimpleHTTPServer的文件上传下载工具
python 写的轻量级的文件共享服务器(基于内置的 SimpleHTTPServer 模块)支持文件上传下载
300行python代码的轻量级HTTPServer实现文件上传下载(Python3版本)
https://github.com/masikkk/py/blob/master/tools/http_server_with_upload.py
拷贝自
https://gist.github.com/0312birdzhang/7dc7b8fde43b64ecd004
模块
urllib/urllib2/requests
python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httplib2, requests
python3.X 有这些库名可用: urllib, urllib3, httplib2, requests
对于python2.X
urllib2 可以接受Request对象为URL设置头信息,修改用户代理,设置cookie等, urllib只能接受一个普通的URL.
urllib 提供一些比较原始基础的方法而urllib2没有这些, 比如 urlencode
对于python3.X
将python2.7版本的urllib和urllib2 合并在一起成一个新的urllib包, 此包分成了几个模块:
- urllib.request 用于打开和读取URL,
- urllib.error 用于处理前面request引起的异常,
- urllib.parse 用于解析URL,
- urllib.robotparser 用于解析robots.txt文件
python2.X 中的 urllib.urlopen()被废弃, urllib2.urlopen()相当于python3.X中的urllib.request.urlopen()
requests 使用的是 urllib3,继承了 urllib2 的所有特性。Requests 支持 HTTP 连接保持和连接池,支持使用 cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
推荐使用 requests
os 模块
os.path.abspath()
获取文件或目录的绝对路径
os.path.abspath(__file__)
获取当前 Python 脚本文件的绝对路径os.path.dirname(os.path.dirname(__file__))
获取当前 Python 脚本所在的目录的绝对路径
print(os.path.abspath(".")) #当前目录的绝对路径
print(os.path.abspath(r"..")) #上级目录的绝对路径
print(os.path.abspath(r"xxx.py")) #文件的绝对路径
os.path.dirname()
返回文件路径
os.environ 操作环境变量
https://docs.python.org/3/library/os.html#os.environ
os.environ
是 Python 中一个用于访问和操作环境变量的接口。它是 os
模块中的一个属性,提供了一个代表当前操作系统环境变量的字典对象。通过这个接口,你可以读取、修改或删除环境变量。
对 os.environ
的修改(添加、修改、删除)仅对当前 Python 进程及其启动的子进程有效,不会影响父进程或系统中的其他进程。
1、读取环境变量
import os
# 读取 PATH 环境变量
path = os.environ['PATH']
# 读取 PATH 环境变量,如果不存在返回 default_path,避免读不存在的环境变量导致 KeyError 错误
path = os.environ.get('PATH', 'default_path')
2、修改环境变量
要修改环境变量的值,你可以直接给 os.environ
字典的相应键赋值。但请注意,这样的修改只会影响当前 Python 进程及其子进程的环境变量,不会改变操作系统级别的环境变量。
import os
# 新建环境变量
os.environ['MY_VAR'] = 'my_value'
# 或者修改已有的环境变量
os.environ['PATH'] = '/new/path:' + os.environ['PATH']
3、删除环境变量
要删除一个环境变量,你可以使用 del
语句。同样,这样的删除只会影响当前 Python 进程及其子进程
import os
del os.environ['MY_VAR']
os.system() 执行命令
https://docs.python.org/3/library/os.html#os.system
os.system
是 Python 中的一个函数,它允许你直接从 Python 脚本中调用操作系统的命令行界面(CLI)或终端中的命令。
返回值:os.system
返回一个整数,这个整数是命令执行后的退出状态码。通常,0 表示成功,非0 值表示有错误发生
输出处理:os.system
执行的命令的输出会直接打印到控制台,而不是捕获到 Python 变量中。如果你需要处理命令的输出,可能需要使用其他方法,如 subprocess
模块。
import os
os.system('ls');
os.system('python script.py');
使用 subprocess 代替 os.system
使用 os.system
执行外部命令可能会带来安全风险,特别是当命令字符串中包含用户输入时。恶意用户可能会利用这一点来执行恶意代码。因此,对于需要处理用户输入的情况,建议使用更安全的方法,如 subprocess
模块。
由于 os.system
的安全性和灵活性方面的限制,Python 的 subprocess
模块通常被认为是更好的选择。subprocess
模块提供了更强大和灵活的方式来创建新的进程,连接它们的输入/输出/错误管道,并获得它们的返回码。
subprocess 模块
call() 子进程执行命令
https://docs.python.org/3/library/subprocess.html#subprocess.callsubprocess.call
是 Python 中 subprocess
模块提供的一个函数,用于执行外部命令或程序,并等待命令完成。这个函数会启动一个新的进程,运行指定的命令,然后等待这个命令执行完成。
最后返回命令的退出状态码。退出状态码通常用于表示命令是否成功执行,其中 0 表示成功,非 0 值表示出现了错误或异常。
subprocess.call
是在 Python 2.x 和 Python 3.x 中都可以使用的,但在 Python 3.5 及以上版本中,推荐使用 subprocess.run
作为替代,因为 subprocess.run
提供了更高级的错误处理和输出捕获功能。
import subprocess
returncode = subprocess.call(["command", "arg1", "arg2", ...])
run() 子进程执行命令(3.5+推荐)
https://docs.python.org/3/library/subprocess.html#subprocess.runsubprocess.run
是 Python 3.5 及以上版本中 subprocess
模块提供的一个函数,用于在新进程中执行指定的命令。这个函数是对更底层的 Popen
接口的一个更高级的封装,使得在大多数情况下,执行外部命令变得更加简单和直观。
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)
参数:args
要运行的命令和参数,可以是字符串(例如 "ls -l"
),也可以是字符串列表(例如 ["ls", "-l"]
)。capture_output
布尔值,如果为 True
,则 stdout
和 stderr
会被捕获,并作为 CompletedProcess
实例的属性返回。这与设置 stdout=PIPE
和 stderr=PIPE
相同。text
布尔值,如果为 True
,则捕获的输出会被解码为字符串(默认为 False
,输出为字节)。shell
布尔值,如果为 True
,则命令会通过 shell 运行(例如 /bin/sh -c
)。注意:使用 shell=True
可能会带来安全风险,特别是当命令包含不受信任的输入时。check
布尔值,如果为 True
,并且命令返回非零退出状态码,则会引发 CalledProcessError
异常。timeout
浮点数,命令运行的最大时间(秒)。如果命令运行时间超过这个时间,则会引发 subprocess.TimeoutExpired
异常。cwd
设置子进程的当前工作目录。env
定义子进程的环境变量。
返回值:subprocess.run
返回一个 CompletedProcess
实例,该实例包含以下属性:
args
命令及其参数的列表。returncode
子进程的退出状态码。stdout
标准输出的内容(如果capture_output=True
或stdout=PIPE
)。stderr
标准错误的内容(如果capture_output=True
或stdout=PIPE
)。
import subprocess
# 执行一个简单的命令,并等待其完成
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
# 打印命令的输出
print(result.stdout)
# 检查命令是否成功执行
if result.returncode == 0:
print("Command succeeded.")
else:
print("Command failed with return code:", result.returncode)
json
json.loads() 反序列化/json串转对象
json 对象会转换为 Python dict 字典
json_str = '{"url": "http://www.masikkk.com", "name": "mde", "no": 1}'
obj = json.loads(json_str)
print "Python 对象类型:%s,数据:%s" % (type(obj), obj)
结果:
Python 对象类型:<type 'dict'>,数据:{u'url': u'http://www.masikkk.com', u'name': u'mde', u'no': 1}
json.dumps() 序列化/对象转json串
data = {
'no': 1,
'name': 'mde',
'url': 'http://www.masikkk.com'
}
json_str = json.dumps(data)
print ("JSON 串:%s" % json_str)
结果:
JSON 串:{"url": "http://www.masikkk.com", "name": "mde", "no": 1}
default=str解决对象无法序列化问题
报错:
sample = {}
sample['title'] = "String"
sample['somedate'] = somedatetimehere
TypeError: datetime.datetime(2012, 8, 8, 21, 46, 24, 862000) is not JSON serializable
解决:
json.dumps(my_dictionary, indent=4, sort_keys=True)
增加 default=str 参数,变为:
json.dumps(my_dictionary, indent=4, sort_keys=True, default=str)
解释:
default 这个参数可以解决对象不可序列化的问题,default=str 代表将无法识别的类型序列化为字符串类型,不管数据是啥类型。
但是用这个之后,如果想再返序列化,可能就不行了,我们这里不需要反序列化
How to overcome “datetime.datetime not JSON serializable”?
https://stackoverflow.com/questions/11875770/how-to-overcome-datetime-datetime-not-json-serializable
Pandas
Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据)。
三方包
sqlalchemy
https://github.com/sqlalchemy/sqlalchemy
SQLAlchemy是一个用纯Python编写的开源SQL工具包和对象关系映射(ORM)框架,它使得Python程序员可以轻松地与关系型数据库(比如MySQL、PostgreSQL、Oracle等)交互。
科学计算相关包
2to3.py
几乎所有的Python2程序都需要一些修改才能正常地运行在Python3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会将你的Python 2程序源文件作为输入,然后自动将其转换到Python 3的形式。这个脚本的位置位在Python安装的根目录下的 Python35\Tools\scripts\目录中。
-w参数
,不加-w参数,则默认只是把转换过程所对应的diff内容打印输出到当前窗口而已。加了-w,就是把改动内容,写回到原先的文件了,同时会将原文件保存为文件名.bak做备份。
将当前目录下的python2源码transform.py转换为python3:2to3.py -w transform.py
执行完后transform.py变为python3格式源码,同时生成transform.py.bak
将E:\ipv6–master\下的所有python2代码转换为python3:python 2to3.py -w E:\ipv6--master\
pip
pip freeze
命令可查看通过pip安装了哪些包,分别是什么版本
D:\python.code\4.RandomForest>pip freeze
backports.weakref==1.0rc1
bleach==1.5.0
cycler==0.10.0
html5lib==0.9999999
Keras==2.0.5
Markdown==2.2.0
matplotlib==2.1.0
numpy==1.13.0+mkl
pandas==0.20.2
protobuf==3.3.0
pyparsing==2.2.0
python-dateutil==2.6.0
pytz==2017.2
PyYAML==3.12
scikit-learn==0.18.1
scipy==0.19.0
six==1.10.0
tensorflow==1.2.0
Theano==0.9.0
Werkzeug==0.12.2
python3 Windows安装
从官网 https://www.python.org/ 下载Python3.5.3 Windows版安装文件 python-3.5.3-amd64.exe 安装,勾选Add Python 3.5.3 to PATH加入环境变量,其他默认安装即可。
默认会安装:Documentation,pip,tcl/tk and IDLE,Python test suite,py launcher
默认安装目录为:C:\Users\用户名\AppData\Local\Programs\Python\Python35
安装完成后打开CMD命令窗口,输入python
,出现python版本提示并进入python交互环境说明安装成功,如下:
C:\Users\User>python
Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
若提示”python不是内部或外部命令,也不是可运行的程序或批处理文件”说明PATH环境变量没配置,手动将python安装目录加入PATH环境变量。
numpy安装
从 https://pypi.python.org/pypi/numpy 下载numpy-1.13.0
numpy和python是有版本对应关系的,由于我们的Python装的是python-3.5.3-amd64版,所以在这里要选用amd64并对应cp35,下载numpy-1.13.0-cp35-none-win_amd64.whl 安装包
CMD命令窗口中使用pip install
安装,如下:
C:\Users\User>pip install d:软件\\Python\\numpy-1.13.0-cp35-none-win_amd64.whl
Processing d:\软件\python\numpy-1.13.0-cp35-none-win_amd64.whl
Installing collected packages: numpy
Successfully installed numpy-1.13.0
scipy安装
从 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载scipy-0.19.0 的Windows安装包 scipy-0.19.0-cp35-cp35m-win_amd64.whl
CMD命令窗口中使用pip install
安装,如下:
C:\Users\User>pip install d:软件\\Python\\scipy-0.19.0-cp35-cp35m-win_amd64.whl
Processing d:\软件\python\scipy-0.19.0-cp35-cp35m-win_amd64.whl
Requirement already satisfied: numpy>=1.8.2 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from scipy==0.19.0)
Installing collected packages: scipy
Successfully installed scipy-0.19.0
安装成功后,在python环境下执行命令import scipy
,报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\User\AppData\Local\Programs\Python\Python35\lib\site-packages\scipy\__init__.py", line 61, in <module>
from numpy._distributor_init import NUMPY_MKL # requires numpy+mkl
ImportError: cannot import name 'NUMPY_MKL'
原因是安装的numpy中不包含MKL包,在 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载Numpy+MKL安装包numpy-1.13.0+mkl-cp35-cp35m-win_amd64.whl,然后卸载刚安装的numpypip uninstall numpy-1.13.0-cp35-none-win_amd64.whl
重新安装numpy-1.13.0+mkl-cp35-cp35m-win_amd64.whl,
安装成功后,在python环境下执行命令import scipy
,成功。
https://www.zhihu.com/question/30188492/answer/125707763
scikit-learn安装
Scikit-learn requires:
Python (>= 2.6 or >= 3.3),
NumPy (>= 1.6.1),
SciPy (>= 0.9).
从 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载Scikit-learn-0.18.2 的Windows安装包 scikit_learn‑0.18.2‑cp35‑cp35m‑win_amd64.whl
CMD命令窗口中使用pip install
安装,如下:
C:\Users\User>pip install "d:软件\\Python\\scikit_learn-0.18.1-cp35-cp35m-win_amd64.whl"
Processing d:\软件\python\scikit_learn-0.18.1-cp35-cp35m-win_amd64.whl
Installing collected packages: scikit-learn
Successfully installed scikit-learn-0.18.1
安装成功后进入python命令行执行命令from sklearn import datasets
,不报错说明安装成功。
theano安装
在安装keras之前,要先安装numpy,scipy和theano,因为keras是基于theano向上开发的,所以要安装keras先安装theano。
从 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载Theano-0.9.0-py2.py3-none-any.whl安装
C:\Users\User>pip install "d:软件\\Python\\Theano-0.9.0-py2.py3-none-any.whl"
Processing d:\软件\python\theano-0.9.0-py2.py3-none-any.whl
Requirement already satisfied: scipy>=0.14 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from Theano==0.9.0)
Requirement already satisfied: numpy>=1.9.1 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from Theano==0.9.0)
Collecting six>=1.9.0 (from Theano==0.9.0)
Downloading six-1.10.0-py2.py3-none-any.whl
Installing collected packages: six, Theano
Successfully installed Theano-0.9.0 six-1.10.0
安装完在python命令行执行import theano
提示没有安装g++:
>>> import theano
WARNING (theano.configdefaults): g++ not available, if using conda: `conda install m2w64-toolchain`
WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will defau
lt to Python implementations. Performance will be severely degraded. To remove this warning, set Theano flags cxx to an empty string.
解决方法是安装MinGW,然后将mingw安装目录中的bin目录添加到PATH环境变量,因为里面有g++.exe
我本机已经安装了cygwin64,其中也有g++.exe,将其中的bin目录加入PATH环境变量也可以。
之后在python命令行执行import theano
报出一堆错误信息。
安装keras
C:\Users\User>pip install "d:软件\\Python\\Keras-2.0.5-py2.py3-none-any.whl"
Processing d:\软件\python\keras-2.0.5-py2.py3-none-any.whl
Requirement already satisfied: six in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from Keras==2.0.5)
Requirement already satisfied: theano in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from Keras==2.0.5)
Collecting pyyaml (from Keras==2.0.5)
Downloading PyYAML-3.12-cp35-cp35m-win_amd64.whl (195kB)
100% |████████████████████████████████| 204kB 1.4MB/s
Requirement already satisfied: numpy>=1.9.1 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from theano->Keras==2.0.5)
Requirement already satisfied: scipy>=0.14 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from theano->Keras==2.0.5)
Installing collected packages: pyyaml, Keras
Successfully installed Keras-2.0.5 pyyaml-3.12
安装tensorflow
C:\Users\User>pip install "d:软件\\Python\\Keras-2.0.5-py2.py3-none-any.whl"
Processing d:\软件\python\keras-2.0.5-py2.py3-none-any.whl
Requirement already satisfied: six in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from Keras==2.0.5)
Requirement already satisfied: theano in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from Keras==2.0.5)
Collecting pyyaml (from Keras==2.0.5)
Downloading PyYAML-3.12-cp35-cp35m-win_amd64.whl (195kB)
100% |████████████████████████████████| 204kB 1.4MB/s
Requirement already satisfied: numpy>=1.9.1 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from theano->Keras==2.0.5)
Requirement already satisfied: scipy>=0.14 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from theano->Keras==2.0.5)
Installing collected packages: pyyaml, Keras
Successfully installed Keras-2.0.5 pyyaml-3.12
C:\Users\User>pip install "d:软件\\Python\\tensorflow-1.2.0-cp35-cp35m-win_amd64.whl"
Processing d:\软件\python\tensorflow-1.2.0-cp35-cp35m-win_amd64.whl
Requirement already satisfied: six>=1.10.0 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from tensorflow==1.2.0)
Collecting backports.weakref==1.0rc1 (from tensorflow==1.2.0)
Downloading backports.weakref-1.0rc1-py3-none-any.whl
Collecting html5lib==0.9999999 (from tensorflow==1.2.0)
Downloading html5lib-0.9999999.tar.gz (889kB)
100% |████████████████████████████████| 890kB 1.0MB/s
Requirement already satisfied: numpy>=1.11.0 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from tensorflow==1.2.0)
Collecting protobuf>=3.2.0 (from tensorflow==1.2.0)
Downloading protobuf-3.3.0.tar.gz (271kB)
100% |████████████████████████████████| 276kB 1.0MB/s
Collecting wheel>=0.26 (from tensorflow==1.2.0)
Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
100% |████████████████████████████████| 71kB 1.4MB/s
Collecting markdown==2.2.0 (from tensorflow==1.2.0)
Downloading Markdown-2.2.0.tar.gz (236kB)
100% |████████████████████████████████| 245kB 1.3MB/s
Collecting bleach==1.5.0 (from tensorflow==1.2.0)
Downloading bleach-1.5.0-py2.py3-none-any.whl
Collecting werkzeug>=0.11.10 (from tensorflow==1.2.0)
Downloading Werkzeug-0.12.2-py2.py3-none-any.whl (312kB)
100% |████████████████████████████████| 317kB 1.1MB/s
Requirement already satisfied: setuptools in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from protobuf>=3.2.0->tensorflow=
=1.2.0)
Installing collected packages: backports.weakref, html5lib, protobuf, wheel, markdown, bleach, werkzeug, tensorflow
Running setup.py install for html5lib ... done
Running setup.py install for protobuf ... done
Running setup.py install for markdown ... done
Successfully installed backports.weakref-1.0rc1 bleach-1.5.0 html5lib-0.9999999 markdown-2.2.0 protobuf-3.3.0 tensorflow-1.2.0 werkzeug-0.12.2 wheel-0
.29.0
安装pandas
C:\Users\User>pip install "d:软件\\Python\\pandas-0.20.2-cp35-cp35m-win_amd64.whl"
Processing d:\软件\python\pandas-0.20.2-cp35-cp35m-win_amd64.whl
Requirement already satisfied: numpy>=1.7.0 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from pandas==0.20.2)
Collecting python-dateutil>=2 (from pandas==0.20.2)
Downloading python_dateutil-2.6.0-py2.py3-none-any.whl (194kB)
100% |████████████████████████████████| 194kB 605kB/s
Collecting pytz>=2011k (from pandas==0.20.2)
Downloading pytz-2017.2-py2.py3-none-any.whl (484kB)
100% |████████████████████████████████| 491kB 585kB/s
Requirement already satisfied: six>=1.5 in c:\users\User\appdata\local\programs\python\python35\lib\site-packages (from python-dateutil>=2->pandas==0.
20.2)
Installing collected packages: python-dateutil, pytz, pandas
Successfully installed pandas-0.20.2 python-dateutil-2.6.0 pytz-2017.2
下一篇 Python-安装与环境配置
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: