美文网首页
其他模块

其他模块

作者: 慕知 | 来源:发表于2021-09-02 20:00 被阅读0次

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后,便在得不出结果

待更新

相关文章

  • 其他模块

    1,time 和 datetime 模块 2,random模块 3,os模块 os模块是与操作系统交互的一个接口 ...

  • 017:其他模块

    介绍 包含AB,格式化代码创建,Lua,编辑器扩展等等 暂时不想介绍

  • 极蠢的错误

    在Maven的项目模块化中,某一个模块使用classLoader获取其他模块的资源。 其实只要依赖其他模块就行了....

  • 重点知识复习(异常处理)

    1.模块 导入模块(自定义模块,第三方模块,系统其他模块)import 模块 ----> 模块.内容from 模...

  • 如何调用其他模块

    方法1:module.exports和let a = require('b') 被调取的模块 发起调用请求的模块 ...

  • # 过渡模块transition

    # 过渡模块transition # 过渡模块-其他属性 # 过渡模块-弹性效果 # 过渡模块-手风琴效果 # 什...

  • python导入自定义模块时注意事项

    1.模块名称注意不要和系统中其他模块有冲突 2.模块中的方法要注意不要和系统中其他模块冲突 3.使用anacond...

  • Pygame

    文件操作 1.模块导入模块(自定义模块,第三方模块,系统其他模块)import 模块使用方式:模块.内容from ...

  • NodeJS 自定义模块

    模块的组成 require - 引入其他模块 module - 单独输出模块 exports - 批量输出模...

  • SAP PS模块简介

    PS模块基本功能 PS模块项目特点 PS模块与其他模块的集成 PS模块项目阶段 PS模块组织结构 PS模块项目结构...

网友评论

      本文标题:其他模块

      本文链接:https://www.haomeiwen.com/subject/evqgiltx.html