一、timedatetime模块
1、时间分为三种格式:
1、时间戳:从1970年到现在经过的秒数
作用:用于时间间隔的计算
print(time.time()) # 1585554811.0685697
2、按照某种格式显示的时间:2020-03-30 11:11:11
作用:用于展示时间
print(time.strftime('%Y-%m-%d %H:%M:%S %p')) # 年月日 时分秒 时间段 2020-03-30 15:56:39 PM
print(time.strftime('%Y-%m-%d %X')) # 年月日,时分秒
3、结构化的时间
作用:用于单独获取时间的某一部分
res = time.localtime()
print(res)
print(res.tm_year)
print(res.tm_yday)
二:datetime
import datetime
print(datetime.datetime.now()) # 2020-03-30 16:18:25.157068
print(datetime.datetime.now() + datetime.timedelta(days=3)) # 2020-04-02 16:18:25.157068
print(datetime.datetime.now() + datetime.timedelta(weeks=1)) # 2020-04-06 16:18:25.157068
2、时间模块需要掌握的操作
1、时间格式的转换
struct_time->时间戳
s_time=time.localtime()
print(s_time)
print(time.mktime(s_time))
时间戳->struct_time
tp_time=time.time()
print(time.localtime(tp_time))
补充:世界标准时间与本地时间
print(time.localtime())
print(time.gmtime()) # 世界标准时间,了解
print(time.localtime(333333333))
print(time.gmtime(333333333))
struct_time->格式化的字符串形式的时间
s_time=time.localtime()
print(time.strftime('%Y-%m-%d %H:%M:%S',s_time))
print(time.strptime('1988-03-03 11:11:11','%Y-%m-%d %H:%M:%S'))
重点需掌握
format string--->struct_time--->timestamp
struct_time=time.strptime('1988-03-03 11:11:11','%Y-%m-%d %H:%M:%S')
timestamp=time.mktime(struct_time)+7*86400
print(timestamp)
format string<---struct_time<---timestamp
res=time.strftime('%Y-%m-%d %X',time.localtime(timestamp))
print(res)
图解:
了解知识
import time
print(time.asctime())
import datetime
print(datetime.datetime.now()) # 北京时间
print(datetime.datetime.utcnow()) # 世界标准时间
print(datetime.datetime.fromtimestamp(333333)) # 它不能选择输出顺序,只能年月日 分时秒
二、Random模块
1、知识点
import random
print(random.random()) #(0,1)----float 大于0且小于1之间的小数
print(random.randint(1, 3)) # [1,3] 大于等于1且小于等于3之间的整数
print(random.randrange(1, 3)) # [1,3) 大于等于1且小于3之间的整数
print(random.choice([111, 'aaa', [4, 5]])) # 1或者23或者[4,5]
print(random.sample([111, 'aaa', 'ccc','ddd'],2)) # 列表元素任意2个组合
print(random.uniform(1, 3)) # 大于1小于3的小数,如1.927109612082716
item = [1, 3, 5, 7, 9]
random.shuffle(item) # 打乱item的顺序,相当于"洗牌"
print(item)
2、应用:随机验证码
"""
实现思想:
import random
res=''
for i in range(6):
从26大写字母中随机取出一个=chr(random.randint(65,90))
从10个数字中随机取出一个=str(random.randint(0,9))
从26小写字母中随机取出一个=chr(random.randint(97,122))
随机字符=random.choice([从26大写字母中随机取出一个,从10个数字中随机取出一个])
res+=随机字符
"""
import random
def make_code(size=4):
res=''
for i in range(size):
s1=chr(random.randint(65,90))
s2=str(random.randint(0,9))
s3=chr(random.randint(97,122))
print(res)
return res
print(make_code(6))
三、os模块
1、常见命令
"""
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下为"
",Linux下为"
"
os.pathsep 输出用于分割文件路径的字符串 win7下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
"""
2、命令使用
1、获取某一个文件夹下所有的子文件以及子文件夹的名字以及查看相对应文件的大小
res=os.listdir('.')
print(res) # ['note.py']
size=os.path.getsize(r'/Users/linhaifeng/PycharmProjects/s14/day22/01 时间模块.py')
print(size) # 2346
2、打印文件信息和重命名
os.system('dir E:\Python学习相关') # 打印文件夹下的文件信息
os.rename('old_name', 'new_name') # 重命名文件夹/目录
3、environ功能:规定key与value必须都是字符串
os.environ['aaa']='111' # 某个位置登录用户,通过用户依据去数据库文件查找信息
print(os.environ) # 返回值是一个字典
PATH # 在执行系统命令的时候用它
sys.path # 在导模块的时候才会使用它
4、os.path系列(※※※※※)
"""
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的大
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的大小
"""
5、规定根目录
# 推荐用这种
BASE_DIR=os.path.dirname(os.path.dirname(__file__))
print(BASE_DIR)
BASE_DIR=os.path.normpath(os.path.join(
__file__,
'..',
'..'
))
print(BASE_DIR)
6、在python3.5之后,推出了一个新的模块pathlib
from pathlib import Path
res = Path(__file__).parent.parent
print(res)
res=Path('/a/b/c') / 'd/e.txt'
print(res) # acde.txt
print(res.resolve()) # F:acde.txt
四、sys模块
1、常见命令
sys.argv # 命令行参数List,第一个元素是程序本身路径
sys.exit(n) # 退出程序,正常退出时exit(0)
sys.version # 获取Python解释程序的版本信息
sys.maxint # 最大的Int值
sys.path # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform # 返回操作系统平台名称
2、sys.argv使用
import sys
# python3 note.py 1 2 3
# sys.argv 获取的是解释器后的参数值
print(sys.argv) # ['note.py', '1', '2', '3']
3、文件拷贝
src_file = sys.argv[1]
dst_file = sys.argv[2]
with open(r'%s'%src_file, mode='rb') as read_f,
open(r'%s'%dst_file, mode='wb') as write_f:
for line in read_f:
write_f.write(line)
五、shutil模块
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中
import shutil
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
shutil.copyfile(src, dst)
拷贝文件
shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
shutil.copymode('f1.log', 'f2.log') #目标文件必须存在
shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copystat('f1.log', 'f2.log') #目标文件必须存在
shutil.copy(src, dst)
拷贝文件和权限
import shutil
shutil.copy('f1.log', 'f2.log')
shutil.copy2(src, dst)
拷贝文件和状态信息
import shutil
shutil.copy2('f1.log', 'f2.log')
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹
import shutil
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
# 目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
import shutil
shutil.rmtree('folder1')
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
import shutil
shutil.move('folder1', 'folder3')
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar
- base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如 data_bak =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/ - format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
- root_dir: 要压缩的文件夹路径(默认当前目录)
- owner: 用户,默认当前用户
- group: 组,默认当前组
- logger: 用于记录日志,通常是logging.Logger对象
#将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
#将 /data下的文件打包放置 /tmp/目录
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')