17 | 常用内置模块介绍

一、sys

In [1]: import sys

In [2]: sys.version
Out[2]: '3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]'

In [3]: sys.version_info
Out[3]: sys.version_info(major=3, minor=7, micro=6, releaselevel='final', serial=0)

In [4]: print("python 主版本号:{}".format(py_version.major))
python 主版本号:3

In [5]: sys.platform  # 目前系统平台
Out[5]: 'win32'

关于系统平台

  • Windows --> 'win32'
  • Mac --> 'darwin'
  • Linux --> ''linux''

在命令行里,给脚本传参

在 CMD 中使用如下命 编辑一个 pos.py 文件

C:\Users\shark\python-code>notepad pos.py

并写入如下内容

# coding:gbk
import sys
print(sys.argv)

print("脚本的第一个参数:{}".format(sys.argv[1]))

print("脚本的第二个参数:{}".format(sys.argv[2]))
image.png

最后保存退出

输入如下命令,查看结果

C:\Users\shark\python-code>python pos.py lenovo  qf
['pos.py', 'lenovo', 'qf']
脚本的第一个参数:lenovo
脚本的第二个参数:qf

C:\Users\shark\python-code>


二、os

import os
# 获取当前工作目录,即当前python脚本工作的目录路径
In [3]: os.getcwd()
Out[3]: 'C:\\Users\\shark\\python-code'

# 切换当前脚本工作目录;相当于shell下cd
In [7]: os.chdir("D:\\")

In [8]: os.getcwd()
Out[8]: 'D:\\'     

# 创建单级目录,相当于 shell 中的 mkdir dirname
In [11]: os.mkdir("route-tab")

# 获取指定目录下的文件
# 点 代表当前目录
In [12]: os.listdir(".")
Out[12]:
['$RECYCLE.BIN',
 'Program Files',
 'Programs',
 'Python',
 'python-code',
 'route-tab',
 'System Volume Information']

In [13]:

处理路径

image.png
#coding:utf-8
import os
print(f"本文件的文件名{__file__}")
print(f"本文件的绝对路径{os.path.abspath(__file__)}")
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print(f"本文件的上级目录{BASE_DIR}")


三、glob

glob 模块可以在指定的路径下,以模糊匹配的方式查找文件
* 代表零到多个的任意字符,就是所有的字符

In [14]: import glob

In [15]: glob.glob("*.py")
Out[15]: []

In [16]: glob.glob("./*.py")
Out[16]: []

In [17]: !echo #这个命令可以创建普通文件 > a.py

In [18]: !echo #这个命令可以创建普通文件 > b.py

In [19]: glob.glob("./*.py")
Out[19]: ['.\\a.py', '.\\b.py']

In [20]:


四、time 和 datetime

1. time 模块

时间戳类型

单位秒, 数据类型是 浮点型
是从 1970年 1 月 1 日 00:00:00 到当前的秒数

In [34]: time.time()
Out[34]: 1577577413.092128

结构化时间类型

In [35]: time.localtime()
Out[35]: time.struct_time(tm_year=2019, tm_mon=12, tm_mday=29, tm_hour=7, tm_min=58, tm_sec=36, tm_wday=6, tm_yday=363, tm_isdst=0)

In [36]: struct = time.localtime()

In [37]: struct.tm_year
Out[37]: 2019

字符串时间类型

可以实现输出指定格式的时间,数据类型是 字符串

In [38]: import time

In [39]: time.strftime("%F")
Out[39]: '2019-12-29'

In [40]: time.strftime("%T")
Out[40]: '07:53:27'

In [41]: time.strftime("%F_%T")
Out[41]: '2019-12-29_07:53:41'

In [42]: time.strftime("%Y_%m_%d_%H_%M_%S")
Out[42]: '2019_12_29_07_54_28'

格式化时间的变量:

格式 含义
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% ‘%’字符

奇异博士 程序暂停运行

In [43]: time.sleep(2)   # 程序休眠 2 秒钟

时间转换

image.png

将指定的时间戳转换为字符串类型的时间

In [8]: time.strftime("%F %T", time.localtime(18997989))
Out[8]: '1970-08-09 05:13:09'

In [9]: time.strftime("%F %T", time.localtime(198997989))
Out[9]: '1976-04-22 13:13:09'

In [10]: time.strftime("%F %T", time.localtime(1989979893))
Out[10]: '2033-01-22 12:11:33'

将字符串时间转换为时间戳

In [11]: st = "20200103T101000"

In [12]: time.mktime(time.strptime(st, "%Y%m%dT%H%M%S"))
Out[12]: 1578017400.0

In [13]:

2. datatime 时间计算

时间加减

In [16]: import datetime

# 三天后
In [17]: datetime.datetime.now() + datetime.timedelta(3)
Out[17]: datetime.datetime(2020, 1, 1, 8, 46, 48, 510787)

# 30 分钟后
In [18]: datetime.datetime.now() + datetime.timedelta(minutes=30)
Out[18]: datetime.datetime(2019, 12, 29, 9, 17, 17, 449121)

# 3 天前
In [19]: datetime.datetime.now() - datetime.timedelta(3)
Out[19]: datetime.datetime(2019, 12, 26, 8, 47, 26, 684824)

时间格式转换

>>> datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m %T')
'2019-12 16:56:42'


五、subprocess 模块

allow_agent=False,look_for_keys=False
ssh.connect('192.168.1.100',username='admin', password='admin123', allow_agent=False,look_for_keys=False)
In [20]: import subprocess

In [21]: subprocess.getoutput("dir")
Out[21]: ' 驱动器 D 中的卷没有标签。\n 卷的序列号是 14B9-038E\n\n D:\\python-code 的目录\n\n2019/12/29  08:11    <DIR>          .\n2019/12/29  08:11    <DIR>          ..\n2019/12/27  22:34    <DIR>          .vscode\n2019/12/28  16:50            15,664 a.jpg\n2019/12/29  08:11                56 a.py\n2019/12/28  17:04    <DIR>          day02\n2019/12/29  08:32               237 test_path.py\n               3 个文件         15,957 字节\n               4 个目录 20,657,102,848 可用字节'

In [22]: ret = subprocess.getoutput("dir")

In [23]: type(ret)
Out[23]: str



六、paramiko 模块

连接路由器,并执行命令获取结果

import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()

# 信任对方的公钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接到路由器
ssh.connect(hostname='192.168.1.100', username='admin',
password='admin123', allow_agent=False,look_for_keys=False)

# 执行命令
_,sout,_ = ssh.exec_command("show ip interface")

# 获取结果,并转换成列表
sout.readlines()

---------------------------- 以下操作适用于 连接 Linux 系统 ----------------------------

1. 用户名密码方式执行远程主机命令和获取命令执行结果

image.png

3 免密方式执行远程主机命令

一定要先建立公钥信任

ssh-copy-id 服务器用户名@服务器 IP

import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()

# 信任对方的公钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())


# 创建一个自己当前用户的私钥对象

private_key = paramiko.RSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_rsa')



# 连接服务器
ssh.connect(hostname='10.18.46.104', port=22,
            username='root',  # 服务器端的用户
            pkey=private_key  # 本地用户的私钥对象
            )

# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -P')

# 获取命令结果
result = str(stdout.read(), encoding='utf-8')

# 关闭连接
ssh.close()

4 上传下载文件

基于公钥秘钥上传下载

import paramiko

# 下面的命令可以快速创建密钥对,并用 -t 指定了算法类型为 ecdsa
## ssh-keygen -t ecdsa -N "" 
## ssh-copy-id -i ~/.ssh/id_ecdsa.pub -f root@172.16.153.10

# 创建一个本地当前用户的私钥对象
private_key = paramiko.ECDSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_ecdsa')

# 创建一个传输对象
transport = paramiko.Transport(('10.18.46.104',22))

# 使用刚才的传输对象创建一个传输文件的的连接对象
transport.connect(username='root', pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

# 将location.py 上传至服务器 /tmp/test.py
sftp.put('回顾', '/tmp/回顾.txt')

# 将远程主机的文件 /tmp/test.py 下载到本地并命名为  some.py
sftp.get('/tmp/回顾.txt', 'some.txt')

transport.close()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容