其他模块

1,time 和 datetime 模块


import time
# 时间戳(1970年1月1日,秒计算)
>>> print(time.time())
1629797436.9953249


>>> print(time.strftime("%Y-%m-%d %X"))
2021-08-24 17:32:43



import datetime

>>> print(datetime.datetime.now())
2021-08-24 17:25:27.262004

>>> print(datetime.date.fromtimestamp(time.time()) )
2021-08-24


# 当前时间+3天
>>> print(datetime.datetime.now() + datetime.timedelta(3))
2021-08-27 17:34:20.375315

# 当前时间-3天
>>> print(datetime.datetime.now() + datetime.timedelta(-3))
2021-08-21 17:35:27.432718


# 当前时间往后+3小时(往后倒3小时则负数-3表示)
>>> print(datetime.datetime.now() + datetime.timedelta(hours=3))
2021-08-24 20:36:12.993908


# 当前时间往后+30分钟(往后倒30分钟则负数-30表示)
>>> print(datetime.datetime.now() + datetime.timedelta(minutes=30))
2021-08-24 18:06:44.703444



# 时间替换,不会真的改变实际时间
>>> c_time  = datetime.datetime.now()
>>> print(c_time)
2021-08-24 17:38:20.041454

>>> print(c_time.replace(minute=3,hour=2))
2021-08-24 02:03:20.041454

>>> print(c_time)
2021-08-24 17:38:20.041454


2,random模块

import random

# 0-1之间的小数
print(random.random())

# 大于等于1且小于等于4的整数
print(random.randint(1,4))



#大于等于1且小于4的整数(不包括4)
print(random.randrange(1,4))



# choice后面跟列表或者元祖,随机列表或元祖的一个数字(不一定是数字)
print(random.choice([1,33,[3,4],'ab']))
print(random.choice((1,33,[3,4],'ab')))


# 随机从列表里选出2个元素
print(random.sample([1,33,[3,4],'ab'],2))



# 大于1小于4的小数
print(random.uniform(1,4))




#打乱顺序
l=[1,2,3,4,5]
random.shuffle(l)
print(l)
#[5, 4, 2, 1, 6]



# 示例:生成随机验证码
def make_code(n):
    res=''
    for i in range(n):
        s1=str(random.randint(0,9))
        s2=chr(random.randint(65,90))
        res+=random.choice([s1,s2])
    return res

print(make_code(7))
# YR1OWO9

3,os模块

os模块是与操作系统交互的一个接口

# 获取当前目录,相当于shell下的pwd
>>> os.getcwd()
'/Users/shg'


# 切换工作目录,相当于shell下的cd(r的作用是注视引号内的特殊意思)
>>> os.chdir(r"//Users/shiheng/Desktop")
>>> os.getcwd()
'/Users/shg/Desktop'




# 创建递归文件夹
>>> os.makedirs('a/b/c')

# 创建单级目录
>>> os.mkdir('a')


# 修改文件夹名
>>> os.rename('a','aa')


# 递归删除(路径必须要写完整)
>>> os.removedirs('aa/b/c')

# 单级删除,删除c目录 (删除单级空目录,若目录不为空则无法删除,报错)
>>> os.rmdir('a/b/c')


import os

# 将path分割成目录和文件名二元组返回
print(os.path.split(r'/Users/sg/PycharmProjects/py-study/正则表达式/正则.py'))
# ('/Users/sg/PycharmProjects/py-study/正则表达式', '正则.py')


# 返回path的目录。其实就是os.path.split(path)的第一个元素
print(os.path.dirname(r'/Users/sg/PycharmProjects/py-study/正则表达式/正则.py'))
# /Users/sg/PycharmProjects/py-study/正则表达式


# 返回path最后的文件名
print(os.path.basename(r'/Users/sg/PycharmProjects/py-study/正则表达式/正则.py'))
# 正则.py


# os.path.exists(path),路径存在返回True,不存在返回False
print(os.path.exists(r'/User/py-study/正则表达式/正则.py'))
# False




# os.path.isabs(path)  如果path是绝对路径,返回True
print(os.path.isdir(r'/root/a.txt'))


# 拼接路径
print(os.path.join('/root','etc','a.txt'))
# /root/etc/a.txt



# normpath
BASE_DIR=os.path.normpath(os.path.join(
    os.path.abspath(__file__),
    '..',
    '..'
))

print(BASE_DIR)
# /Users/shiheng/PycharmProjects/py-study



# 等同于
BASE_DIR2=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR2)
# /Users/shiheng/PycharmProjects/py-study

补充

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
os.path.abspath(path)  返回path规范化的绝对路径
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

4,sys模块

示例

#1 sys.argv           命令行参数List,第一个元素是程序本身路径
#2 sys.exit(n)        退出程序,正常退出时exit(0)
#3 sys.version        获取Python解释程序的版本信息
#4 sys.maxint         最大的Int值
#5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
#6 sys.platform       返回操作系统平台名称



#!/usr/bin/env python

import sys
import os

if len(sys.argv) != 2:
    print('Usage: ./vpn_clear.py username')
    sys.exit()

username = sys.argv[1]


def clear_ipsec_conf(username):
    """
    clear /etc/strongswan/ipsec.conf
    """
    os.chdir('/etc/strongswan/')
    with open('ipsec.conf', mode='rt') as f1, \
            open('.tmp.swp', mode='wt') as f2:
        tag = 0

        for line in f1:
            res = line.strip('\n').endswith(username)
            if res:
                tag = 1

            if tag == 1 and line.strip() == '':
                tag = 0

            if tag == 0:
                f2.write(line)

    os.remove('ipsec.conf')
    os.rename('.tmp.swp', 'ipsec.conf')



打印进度条

import time
def progress(percent,width=50):
    if percent >=1:
        percent=1
    show_str=('[%%-%ds]' % width) % ('#' * int(width*percent))
    print('\r%s %d%%' %(show_str,int(100*percent)),end='')

recv_size=0
total_size=102312
while recv_size < total_size:
    time.sleep(0.1)
    recv_size+=1024
    progress(recv_size/total_size)

5,shutil模块

# 如图3


#1,shutil.copyfileobj将文件内容拷贝到另一个文件中
import shutil
shutil.copyfileobj(open('正则.py','r'),open('new.xml','w'))


执行后会新建个文件new.xml







# 2,shutil.copyfile拷贝我文件,目标文件不需要存在
import shutil

shutil.copyfile('new.xml','bb.xml')





 

#3,shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

shutil.copymode('f1.log', 'f2.log') #目标文件必须存在






#4,shutil.copy(src, dst) 拷贝文件和权限

import shutil
shutil.copy('f1.log', 'f2.log')






#5,shutil.copytree递归拷贝(目标目录一定不能存在

# 递归拷贝)
import shutil

shutil.copytree('/Users/sg/PycharmProjects/py-study/日志模块','new_日志模块',ignore=shutil.ignore_patterns('s*'))

#以上把Users/sg/PycharmProjects/py-study/日志模块文件夹的所有内容拷贝到“new_日志模块”文件夹,并且忽略s开头的文件






#6,import shutil  递归删除

# 递归删除(删除文件夹及其所有的内容)
import shutil

shutil.rmtree('new_日志模块')





#7,shutil.move (类似于move)
# 类似mv命令
import shutil

shutil.move('new_日志模块','hello')






#8,shutil.make_archive压缩文件

# 把/Users/sg/PycharmProjects/py-study/路径下的"日志模块"打包在当前路径命名为bak
(注意不需要自己家tar.gz后缀)

import  shutil
ret=shutil.make_archive('bak','gztar',root_dir='/Users/sg/PycharmProjects/py-study/日志模块')

当前路径会出现这个压缩包 bak.tar.gz






#9, 解压
import tarfile
t=tarfile.open('bak.tar.gz','r')
t.extractall('mmmm')
t.close()

把bak.tar.gz解压为mmmm文件








#10,zip压缩
import zipfile
z=zipfile.ZipFile('zzbak.zip','w')
z.write('正则.py')
z.close

会把当前的正则.py文件压缩为zzbak.zip






#11,zip解压
import zipfile
z=zipfile.ZipFile('zzbak.zip','r')
z.extractall(path='ppp')

解压文件zzbak.zip,解压到当前目录ppp下(ppp目录不存在会自动创建)








#12,tar压缩
import tarfile
# t=tarfile.open('ooooo','w')
# t.add('a.py',arcname='a.bak')
# t.add('b.py',arcname='b.bak')
# t.close()
a.py压缩为a.bak
b.py压缩为b.bak
放在ooooo这个压缩包里






#13,tar解压
import tarfile

t=tarfile.open('ooooo','r')
t.extractall('ppp')
t.close()


打开压缩包ooooo,解压到当前目录ppp下

图3

6,序列化json

# json不识别单引号

import json
dic={'name':'mz','age':22,'sex':'female'}
print(type(dic))
# <class 'dict'>


j=json.dumps(dic)
print(type(j))
# <class 'str'>



f=open('序列化对象','w')
f.write(j)
f.close()
# 会在当前目录下生成一个"序列化对象"内容为 {"name": "mz", "age": 22, "sex": "female"}


# 把存到文件的内容读取到内存(反序列化)
f=open('序列化对象','r')
data=json.loads(f.read())


7,pickle

# pick是byte类型

import pickle
dic={'name':'mmz','age':22,'sex':'female'}
print(type(dic))
# <class 'dict'>



j=pickle.dumps(dic)
print(type(j))
# <class 'bytes'>


f=open('序列化对象pickle','wb')
f.write(j)
f.close()



# 会生成一个"序列化对象的文件",以bytes类型记录dic




import pickle
f=open('序列化对象pickle','rb')
data=pickle.loads(f.read())

print(data)
# {'name': 'mmz', 'age': 22, 'sex': 'female'}


print(data['name'])
# mmz


print(data['age'])
# 22





#总结:
JSON和Python内置的数据类型对应如下(不是所有的python类型都可以转化为json)
pickle 以 bytes类型大多数都支持


8, shelve模块

# a.txt文件本身不存在
import shelve
f=shelve.open('a.txt')


f['info1']={"name":"mz1","age":13,"sex":"female"}
f['info2']={"name":"mz2","age":23,"sex":"male"}
f['info3']={"name":"mz3","age":33,"sex":"female"}


#以上内容保存到文件后,注释掉,执行以下命令
print(f['info1']['name'])
# mz1

f.close()
#执行close后,便在得不出结果

待更新

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

推荐阅读更多精彩内容

  • 一,什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的...
    100斤的瘦子_汤勇阅读 424评论 0 0
  • 常用模块学习 什么是模块? 为了维护代码 提高代码的可维护性; 使用模块可以避免函数名和变量名冲突; 可重用 模块...
    drfung阅读 696评论 1 1
  • 一.time与datetime模块 1.time模块的三种形式 1.时间戳:从1970年到现在经过的秒数 作用:用...
    浅笑_7cad阅读 86评论 0 0
  • @[toc] 1. 模块 模块可以是一个python文件也可以是文件夹。 1.1 内置模块 python模块内部提...
    Erics1996阅读 1,473评论 0 1
  • 一、logging模块 目录结构如下: 二、re模块什么是正则?正则就是用一些具有特殊含义的符号组合到一起(称为正...
    张大志的博客阅读 259评论 0 0