04: python常用模块
Posted 不做大哥好多年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04: python常用模块相关的知识,希望对你有一定的参考价值。
目录:
- 1.1 时间模块time() 与 datetime()
- 1.2 random()模块
- 1.3 os模块
- 1.4 sys模块
- 1.5 tarfile用于将文件夹归档成 .tar的文件
- 1.6 shutil 创建压缩包,复制,移动文件
- 1.7 zipfile将文件或文件夹进行压缩
- 1.8 shelve 模块
- 1.9 json和pickle序列化
- 1.10 hashlib 模块
- 1.11 subprocess 模块
- 1.12 logging模块
- 1.13 paramiko使用
- 1.14 re模块
- 1.15 xml处理模块
- 1.16 PyYAML模块
- 1.17 ConfigParser模块
1.1 时间模块time() 与 datetime() 返回顶部
1、 time()模块中的重要函数
函数 |
描述 |
asctime([tuple]) |
将时间元组转换为字符串 |
localtime([secs]) |
将秒数转换为日期元组(转换成本国时区而不是utc时区) |
mktime(tuple) |
将时间元组转换为本地时间 |
sleep(secs) |
休眠(不做任何事情)secs秒 |
strptime(string[, format]) |
将字符串解析为时间元组 |
time() |
获取当前时间戳 |
time.gmtime() |
将时间转换成utc格式的元组格式 |
2、time()模块时间格式转换
3、time()模块时间转换
1. 时间戳 1970年1月1日之后的秒, 即:time.time()
2. 格式化的字符串 2014-11-11 11:11, 即:time.strftime(\'%Y-%m-%d\')
3. 结构化时间 元组包含了:年、日、星期等... time.struct_time 即:time.localtime()
import time print(time.time()) # 时间戳:1511166937.2178104 print(time.strftime(\'%Y-%m-%d\')) # 格式化的字符串: 2017-11-20 print(time.localtime()) # 结构化时间(元组): (tm_year=2017, tm_mon=11...) print(time.gmtime()) # 将时间转换成utc格式的元组格式: (tm_year=2017, tm_mon=11...) #1. 将结构化时间转换成时间戳: 1511167004.0 print(time.mktime(time.localtime())) #2. 将格字符串时间转换成结构化时间 元组: (tm_year=2017, tm_mon=11...) print(time.strptime(\'2014-11-11\', \'%Y-%m-%d\')) #3. 结构化时间(元组) 转换成 字符串时间 :2017-11-20 print(time.strftime(\'%Y-%m-%d\', time.localtime())) # 默认当前时间 #4. 将结构化时间(元组) 转换成英文字符串时间 : Mon Nov 20 16:51:28 2017 print(time.asctime(time.localtime())) #5. 将时间戳转成 英文字符串时间 : Mon Nov 20 16:51:28 2017 print(time.ctime(time.time()))
4、ctime和asctime区别
1)ctime传入的是以秒计时的时间戳转换成格式化时间
2)asctime传入的是时间元组转换成格式化时间
import time t1 = time.time() print(t1) #1483495728.4734166 print(time.ctime(t1)) #Wed Jan 4 10:08:48 2017 t2 = time.localtime() print(t2) #time.struct_time(tm_year=2017, tm_mon=1, tm_mday=4, tm_hour=10, print(time.asctime(t2)) #Wed Jan 4 10:08:48 2017
5、datetime
import datetime #1、datetime.datetime获取当前时间 print(datetime.datetime.now()) #2、获取三天后的时间 print(datetime.datetime.now()+datetime.timedelta(+3)) #3、获取三天前的时间 print(datetime.datetime.now()+datetime.timedelta(-3)) #4、获取三个小时后的时间 print(datetime.datetime.now()+datetime.timedelta(hours=3)) #5、获取三分钟以前的时间 print(datetime.datetime.now()+datetime.timedelta(minutes = -3)) import datetime print(datetime.datetime.now()) #2017-08-18 11:25:52.618873 print(datetime.datetime.now().date()) #2017-08-18 print(datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S")) #2017-08-18 11-25-52
#1、datetime对象与str转化 # datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") \'2018-03-09 10:08:50\' # datetime.datetime.strptime(\'2016-02-22\',"%Y-%m-%d") datetime.datetime(2016, 2, 22, 0, 0) #2、datetime对象转时间元组 # datetime.datetime.now().timetuple() time.struct_time(tm_year=2018, tm_mon=3, tm_mday=9, #3、时间戳转换成datetime对象 # datetime.datetime.fromtimestamp(1520561646.8906238) datetime.datetime(2018, 3, 9, 10, 14, 6, 890624)
6、本地时间与utc时间相互转换
# -*- coding: utf-8 -*- import time import datetime def utc2local(utc_st): \'\'\' 作用:将UTC时间装换成本地时间 :param utc_st: 传入的是utc时间(datatime对象) :return: 返回的是本地时间 datetime 对象 \'\'\' now_stamp = time.time() local_time = datetime.datetime.fromtimestamp(now_stamp) utc_time = datetime.datetime.utcfromtimestamp(now_stamp) offset = local_time - utc_time local_st = utc_st + offset return local_st def local2utc(local_st): \'\'\' 作用:将本地时间转换成UTC时间 :param local_st: 传入的是本地时间(datatime对象) :return: 返回的是utc时间 datetime 对象 \'\'\' time_struct = time.mktime(local_st.timetuple()) utc_st = datetime.datetime.utcfromtimestamp(time_struct) return utc_st utc_time = datetime.datetime.utcfromtimestamp(time.time()) # utc_time = datetime.datetime(2018, 5, 6, 5, 57, 9, 511870) # 比北京时间晚了8个小时 local_time = datetime.datetime.now() # local_time = datetime.datetime(2018, 5, 6, 13, 59, 27, 120771) # 北京本地时间 utc_to_local = utc2local(utc_time) local_to_utc = local2utc(local_time) print utc_to_local # 2018-05-06 14:02:30.650270 已经转换成了北京本地时间 print local_to_utc # 2018-05-06 06:02:30 转换成北京当地时间
from django.utils import timezone from datetime import datetime utc_time = timezone.now() local_time = datetime.now() #1、utc时间装换成本地时间 utc_to_local = timezone.localtime(timezone.now()) #2、本地时间装utc时间 local_to_utc = timezone.make_aware(datetime.now(), timezone.get_current_timezone())
7、Python计算两个日期之间天数
import datetime d1 = datetime.datetime(2018,10,31) # 第一个日期 d2 = datetime.datetime(2019,2,2) # 第二个日期 interval = d2 - d1 # 两日期差距 print(interval.days) # 具体的天数
1.2 random()模块 返回顶部
1、random()模块常用函数
函数 |
描述 |
random() |
返回0<n<=1 |
getrandbits(n) |
以长整形形式返回n个随机位 |
uniform(a, b) |
返回随机实数n,其中a<=n<=b |
randrange([start], stop, [step]) |
返回range(start,stop,step)中的随机数 |
choice(seq) |
从序列seq中返回随意元素 |
shuffle(seq[, random]) |
原地指定序列seq(将有序列表变成无序的:洗牌) |
sample(sea, n) |
从序列seq中选择n个随机且独立的元素 |
2、random常用函数举例
import random #⒈ 随机整数: print(random.randint(0,99)) # 随机选取0-99之间的整数 print(random.randrange(0, 101, 2)) # 随机选取0-101之间的偶数 #⒉ 随机浮点数: print(random.random()) # 0.972654134347 print(random.uniform(1, 10)) # 4.14709813772 #⒊ 随机字符: print(random.choice(\'abcdefg\')) # c print(random.sample(\'abcdefghij\',3)) # [\'j\', \'f\', \'c\']
3、使用random实现四位验证码
import random checkcode = \'\' for i in range(4): current = random.randrange(0,4) if current == i: tmp = chr(random.randint(65,90)) #65,90表示所有大写字母 else: tmp = random.randint(0,9) checkcode += str(tmp) print(checkcode) #运行结果: 851K
import random import string str_source = string.ascii_letters + string.digits str_list = random.sample(str_source,7) #[\'i\', \'Q\', \'U\', \'u\', \'A\', \'0\', \'9\'] print(str_list) str_final = \'\'.join(str_list) #iQUuA09 print(str_final) # 运行结果: jkFU2Ed
>>> string.digits \'0123456789\' >>> string.ascii_lowercase \'abcdefghijklmnopqrstuvwxyz\'
1.3 os模块 返回顶部
import os #1 当前工作目录,即当前python脚本工作的目录路径 print(os.getcwd()) # C:\\Users\\admin\\PycharmProjects\\s14\\Day5\\test4 #2 当前脚本工作目录;相当于shell下cd os.chdir("C:\\\\Users\\\\admin\\\\PycharmProjects\\\\s14") os.chdir(r"C:\\Users\\admin\\PycharmProjects\\s14") print(os.getcwd()) # C:\\Users\\admin\\PycharmProjects\\s14 #3 返回当前目录: (\'.\') print(os.curdir) # (\'.\') #4 获取当前目录的父目录字符串名:(\'..\') print(os.pardir) # (\'..\') #5 可生成多层递归目录 os.makedirs(r\'C:\\aaa\\bbb\') # 可以发现在C盘创建了文件夹/aaa/bbb #6 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.removedirs(r\'C:\\aaa\\bbb\') # 删除所有空目录 #7 生成单级目录;相当于shell中mkdir dirname os.mkdir(r\'C:\\bbb\') # 仅能创建单个目录 #8 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.rmdir(r\'C:\\aaa\') # 仅删除指定的一个空目录 #9 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 print(os.listdir(r"C:\\Users\\admin\\PycharmProjects\\s14")) #10 删除一个文件 os.remove(r\'C:\\bbb\\test.txt\') # 指定删除test.txt文件 #11 重命名文件/目录 os.rename(r\'C:\\bbb\\test.txt\',r\'C:\\bbb\\test00.bak\') #12 获取文件/目录信息 print(os.stat(r\'C:\\bbb\\test.txt\')) #13 输出操作系统特定的路径分隔符,win下为"\\\\",Linux下为"/" print(os.sep) # \\ #14 输出当前平台使用的行终止符,win下为"\\r\\n",Linux下为"\\n" print(os.linesep) #15 输出用于分割文件路径的字符串 print(os.pathsep) # ; (分号) #16 输出字符串指示当前使用平台。win->\'nt\'; Linux->\'posix\' print(os.name) # nt #17 运行shell命令,直接显示 os.system("bash command") #18 获取系统环境变量 print(os.environ) # environ({\'OS\': \'Windows_NT\', \'PUBLIC\': …………. #19 返回path规范化的绝对路径 print(os.path.abspath(r\'C:/bbb/test.txt\')) # C:\\bbb\\test.txt #20 将path分割成目录和文件名二元组返回 print(os.path.split(r\'C:/bbb/ccc\')) # (\'C:/bbb\', \'ccc\') #21 返回path的目录。其实就是os.path.split(path)的第一个元素 print(os.path.dirname(r\'C:/bbb/ccc\')) # C:/bbb #22 返回path最后的文件名。如何path以/或\\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 print(os.path.basename(r\'C:/bbb/ccc/ddd\')) # ddd #23 如果path存在,返回True;如果path不存在,返回False print(os.path.exists(r\'C:/bbb/ccc/\')) # True #24 如果path是绝对路径,返回True # True print(os.path.isabs(r"C:\\Users\\admin\\PycharmProjects\\s14\\Day5\\test4")) #25 如果path是一个存在的文件,返回True。否则返回False print(os.path.isfile(r\'C:/bbb/ccc/test2.txt\')) # True #26 如果path是一个存在的目录,则返回True。否则返回False print(os.path.isdir(r\'C:/bbb/ccc\')) # True #28 返回path所指向的文件或者目录的最后存取时间 print(os.path.getatime(r\'C:/bbb/ccc/test2.txt\')) # 1483509254.9647143 #29 返回path所指向的文件或者目录的最后修改时间 print(os.path.getmtime(r\'C:/bbb/ccc/test2.txt\')) # 1483510068.746478 #30 无论linux还是windows,拼接出文件路径 put_filename = \'%s%s%s\'%(self.home,os. path.sep, filename) #C:\\Users\\admin\\PycharmProjects\\s14\\day10select版FTP\\home
import os os.makedirs(\'C:/aaa/bbb/ccc/ddd\',exist_ok=True) # exist_ok=True:如果存在当前文件夹不报错 path = os.path.join(\'C:/aaa/bbb/ccc\',\'ddd\',) f_path = os.path.join(path,\'file.txt\') with open(f_path,\'w\',encoding=\'utf8\') as f: f.write(\'are you ok!!\')
import os,sys print(os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) )) BASE_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) sys.path.append(BASE_DIR) # 代码解释: # 要想导入其他目录中的函数,其实就是将其他目录的绝对路径动态的添加到pyhton的环境变量中,这样python解释器就能够在运行时找到导入的模块而不报错: # 然后调用sys模块sys.path.append(BASE_DIR)就可以将这条路径添加到python环境变量中
1、os.popen获取脚本执行结果
data = {\'name\':\'aaa\'} import json print json.dumps(data)
#! /usr/bin/env python # -*- coding: utf-8 -*- import os,json ret = os.popen(\'python data.py\') data = ret.read().strip() ret.close() data = json.loads(data) print data # {\'name\':\'aaa\'}
1.4 sys模块 返回顶部
1、 sys基本方法
sys.argv 返回执行脚本传入的参数
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write(\'please:\')
val = sys.stdin.readline()[:-1]
2、使用sys返回运行脚本参数
import sys # C:\\Users\\tom\\PycharmProjects\\s14Review\\day01> python test01.py 1 2 3 print(sys.argv) # 打印所有参数 [\'test01.py\', \'1\', \'2\', \'3\'] print(sys.argv[1:]) # 获取索引 1 往后的所有参数 [\'1\', \'2\', \'3\']
1.5 tarfile用于将文件夹归档成 .tar的文件 返回顶部
import tarfile # 将文件夹Day1和Day2归档成your.rar并且在归档文件夹中Day1和Day2分别变成bbs2.zip和ccdb.zip的压缩文件 tar = tarfile.open(\'your.tar\',\'w\') tar.add(r\'C:\\Users\\admin\\PycharmProjects\\s14\\Day1\', arcname=\'bbs2.zip\') tar.add(r\'C:\\Users\\admin\\PycharmProjects\\s14\\Day2\', arcname=\'cmdb.zip\') tar.close() # 将刚刚的归档文件your.tar进行解压解压的内容是bbs2.zip和cmdb.zip压缩文件而不是变成原有的文件夹 tar = tarfile.open(\'your.tar\',\'r\') tar.extractall() # 可设置解压地址 tar.close()
1.6 shutil 创建压缩包,复制,移动文件 返回顶部
注 : shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的
作用: shutil 创建压缩包并返回文件路径(如:zip、tar),并且可以复制文件,移动文件
import shutil #1 copyfileobj() 将文件test11.txt中的内容复制到test22.txt文件中 f1 = open("test11.txt",encoding="utf-8") f2 = open("test22.txt",\'w\',encoding="utf-8") shutil.copyfileobj(f1,f2) #2 copyfile() 直接指定文件名就可进行复制 shutil.copyfile("test11.txt",\'test33.txt\') #3 shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变 #4 shutil.copystat(src, dst) 拷贝状态的信息,包括:mode bits, atime, mtime, flags shutil.copystat(\'test11.txt\',\'test44.txt\') #5 递归的去拷贝目录中的所有目录和文件,这里的test_dir是一个文件夹,包含多级文件夹和文件 shutil.copytree("test_dir","new_test_dir") #6 递归的去删除目录中的所有目录和文件,这里的test_dir是一个文件夹,包含多级文件夹和文件 shutil.rmtree("test_dir") #7 shutil.move(src, dst) 递归的去移动文件 shutil.move(\'os_test.py\',r\'C:\\\\\') #8 shutil.make_archive(base_name, format,...) 创建压缩包并返回文件路径,例如:zip、tar \'\'\' 1. base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如:www =>保存至当前路径 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/ 2. format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar” 3. root_dir: 要压缩的文件夹路径(默认当前目录) 4. owner: 用户,默认当前用户 5. group: 组,默认当前组 6. logger: 用于记录日志,通常是logging.Logger对象 \'\'\' #将C:\\Users\\admin\\PycharmProjects\\s14\\Day4 的文件夹压缩成 testaa.zip shutil.make_archive("testaa","zip",r"C:\\Users\\admin\\PycharmProjects\\s14\\Day4")
1.7 zipfile将文件或文件夹进行压缩 返回顶部
import zipfile #将文件main.py和test11.py压缩成day5.zip的压缩文件 z = zipfile.ZipFile(\'day5.zip\', \'w\') z.write(\'main.py\') z.write("test11.txt") z.close() #将刚刚压缩的day5.zip文件进行解压成原文件 z = zipfile.ZipFile(\'day5.zip\', \'r\') z.extractall() z.close()
1.8 shelve 模块 返回顶部
作用:shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
import shelve import datetime #python常用代码片段总结