Python学习-day5 常用模块
day5主要是各种常用模块的学习
- time &datetime模块
- random
- os
- sys
- shutil
- json & picle
- shelve
- xml处理
- yaml处理
- configparser
- hashlib
- subprocess
- logging模块
- re正则表达式
time & datetime模块
#Authon Ivor import time
#打印时间戳
print(time.time())
#打印当前时间的时间对象格式
print(time.localtime()) #字符串转换时间对象
print(time.strptime("2016-02-02 15:52:20","%Y-%m-%d %H:%M:%S"))
#时间对象转换字符串
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) #时间对象转换时间戳
print(time.mktime(time.localtime()))
#时间戳转换时间对象
print(time.gmtime(time.time())) import datetime #打印当前日期时间
print(datetime.datetime.now())
#从时间戳转换成年月日格式
print(datetime.date.fromtimestamp(time.time()))
#从时间戳转换成年月日时间格式
print(datetime.datetime.fromtimestamp(time.time()))
#对当前时间进行加减运算
print(datetime.datetime.now() + datetime.timedelta(days=3))
print(datetime.datetime.now() + datetime.timedelta(hours=-3))
#直接进行时间替换
t = datetime.datetime.now()
print(t.replace(year=2012,month=12,day=24,hour=0,minute=0,second=0))
random模块
#Authon Ivor import random
for i in range(10):
print(random.random())
print(random.randint(1,5))
print(random.randrange(1,5))
shutil 模块
#Authon Ivor import shutil
#拷贝文件对象
f1 = open("random mod.py")
f2 = open("random_new.py","w")
shutil.copyfileobj(f1,f2,length=1) #拷贝文件,文件和权限,包括copyfile和copymode
shutil.copy("random mod.py","random_new.py")
#拷贝文件和状态信息,包括copyfile和copystat
shutil.copy2("random mod.py","random_new.py") #拷贝文件,不包括权限
shutil.copyfile("random mod.py","random_new.py")
#仅拷贝文件权限,仅拷贝权限。内容、组、用户均不变
shutil.copymode("random mod.py","random_new.py")
#拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copystat("random mod.py","random_new.py") #拷贝文件目录,递归拷贝
shutil.copytree()
#递归删除
shutil.rmtree()
#移动文件
shutil.move() shutil.make_archive()
#base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
# 如:www =>保存至当前路径
# 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
# •format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
# •root_dir: 要压缩的文件夹路径(默认当前目录)
# •owner: 用户,默认当前用户
# •group: 组,默认当前组
# •logger: 用于记录日志,通常是logging.Logger对象 import zipfile # 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close() # 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close() # zipfile 压缩解压 import tarfile # 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close() # 解压
tar = tarfile.open('your.tar','r')
tar.extractall() # 可设置解压地址
tar.close()
json & pickle 模块
#Authon Ivor import json
# info = {
# "name":"Ivor",
# "age":"27",
#} info = ["a","b","c","f","f","g"]
with open("jsondump.json","w") as f:
f.write(json.dumps(info)) with open("jsondump.json","w") as f:
json.dump(info,f) #Authon Ivor import json
info = {
"name":"Ivor",
"age":"",
} with open("jsondump.json","r") as f:
a = json.loads(f.read()) with open("jsondump.json","r") as f:
b = json.load(f) print(a,b) #Authon Ivor
import pickle def sayhi():
print("Hello World!") info = {
"name":"Ivor",
"func":sayhi
} with open("pickle.pickle","wb") as f:
f.write(pickle.dumps(info)) with open("pickle.pickle", "wb") as f:
pickle.dump(info,f) #Authon Ivor import pickle def sayhi():
print("Hello World!") with open("pickle.pickle","rb") as f:
pickle.loads(f.read()) with open("pickle.pickle","rb") as f:
pickle.load(f)
shelve 模块
#Authon Ivor
import shelve d = shelve.open('shelve_test') # 打开一个文件 class Test(object):
def __init__(self, n):
self.n = n t1 = Test("")
t2 = Test("ivor")
name = ["alex","ivor"] d["name"] = name
d["t1"] = t1
d["t2"] = t2 d.close()
xml处理模块
#Authon Ivor import xml.etree.ElementTree as et tree = et.parse("test.xml")
root = tree.getroot()
print(root.tag) #遍历xml文档
for child in root:
print(child.tag,child.attrib)
for i in child:
print(i.tag,i.text) #只遍历year节点
for node in root.iter("year"):
print(node.tag,node.text) #修改
for node in root.iter("year"):
new_year = int(node.text) + 1
node.text = str(new_year)
node.set("updates","yes") tree.write("test2.xml") #删除
for country in root.iter("country"):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country) tree.write("test3.xml") 创建xml tree = et.Element("Tree")
stu = et.SubElement(tree,"Stu1")
name = et.SubElement(stu,"name",attrib={"enrolled":"yes"})
name.text = "ivor"
age = et.SubElement(stu,"age",attrib={"checked":"no"})
age.text = ""
stu2 = et.SubElement(tree,"Stu2")
name = et.SubElement(stu2,"name",attrib={"enrolled":"yes"})
name.text = "dark"
age = et.SubElement(stu2,"age",attrib={"checked":"no"})
age.text = "" et = et.ElementTree(tree)
et.write("test4.xml",encoding="utf-8",xml_declaration=True)
ConfigParser模块
#Authon Ivor import configparser
#新增
config = configparser.ConfigParser()
config["DEFAULT"] = {
"port":5506,
"enable":"YES"
}
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
#修改
config["DEFAULT"]["enable"] = "NO"
a = config.sections() print(a) #写入
with open("conf.ini","w") as f:
config.write(f) #读取
config.read("conf.ini")
print(config.sections())
print(config.items())
print(config.keys())
print(config.values()) # ########## 读 ########## # secs = config.sections() # print secs # options = config.options('group2') # print options # item_list = config.items('group2') # print item_list # val = config.get('group1','key') # val = config.getint('group1','key') # ########## 改写 ########## # sec = config.remove_section('group1') # config.write(open('i.cfg', "w")) # sec = config.has_section('wupeiqi') # sec = config.add_section('wupeiqi') # config.write(open('i.cfg', "w")) # config.set('group2','k1',11111) # config.write(open('i.cfg', "w")) # config.remove_option('group2','age') # config.write(open('i.cfg', "w"))
hashlib模块
#Authon Ivor
import hashlib m = hashlib.md5()
m.update(b"Hello")
m.update(b"It's me")
print(m.digest())
m.update(b"It's been a long time since last time we ...")
print(m.digest()) # 2进制格式hash
print(len(m.hexdigest())) # 16进制格式hash
'''
def digest(self, *args, **kwargs): # real signature unknown """ Return the digest value as a string of binary data. """ pass
def hexdigest(self, *args, **kwargs): # real signature unknown """ Return the digest value as a string of hexadecimal digits. """ pass
'''
import hashlib
# ######## md5 ########
hash = hashlib.md5()
hash.update('admin')
print(hash.hexdigest())
# ######## sha1 ########
hash = hashlib.sha1()
hash.update('admin')
print(hash.hexdigest())
# ######## sha256 ########
hash = hashlib.sha256()
hash.update('admin')
print(hash.hexdigest())
# ######## sha384 ########
hash = hashlib.sha384()
hash.update('admin')
print(hash.hexdigest())
# ######## sha512 ########
hash = hashlib.sha512()
hash.update('admin')
print(hash.hexdigest())
Subprocess模块
#Authon Ivor import subprocess #执行命令,返回命令执行状态 , 0 or 非0
retcode = subprocess.call(["ls", "-l"]) #执行命令,如果命令结果为0,就正常返回,否则抛异常
subprocess.check_call(["ls", "-l"]) #接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
subprocess.getstatusoutput('ls /bin/ls')
(0, '/bin/ls') #接收字符串格式命令,并返回结果
subprocess.getoutput('ls /bin/ls')
'/bin/ls' #执行命令,并返回结果,注意是返回结果,不是打印,下例结果返回给res
res=subprocess.check_output(['ls','-l'])
res
b'total 0\ndrwxr-xr-x 12 alex staff 408 Nov 2 11:05 OldBoyCRM\n' #上面那些方法,底层都是封装的subprocess.Popen
p = subprocess.Popen("df -h|grep disk",stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
p.stdout.read() # 可用参数:
# •args:shell命令,可以是字符串或者序列类型(如:list,元组)
# •bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
# •stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
# •preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
# •close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
# 所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
# •shell:同上
# •cwd:用于设置子进程的当前目录
# •env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
# •universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
# •startupinfo与createionflags只在windows下有效
# 将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
logging模块
#Authon Ivor
import logging logging.basicConfig(filename="access.log",level=logging.INFO,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') # 日志格式
#
# %(name)s
# Logger的名字
#
# %(levelno)s
# 数字形式的日志级别
#
# %(levelname)s
# 文本形式的日志级别
#
# %(pathname)s
# 调用日志输出函数的模块的完整路径名,可能没有
#
# %(filename)s
# 调用日志输出函数的模块的文件名
#
# %(module)s
# 调用日志输出函数的模块名
#
# %(funcName)s
# 调用日志输出函数的函数名
#
# %(lineno)d
# 调用日志输出函数的语句所在的代码行
#
# %(created)f
# 当前时间,用UNIX标准的表示时间的浮点数表示
#
# %(relativeCreated)d
# 输出日志信息时的,自Logger创建以来的毫秒数
#
# %(asctime)s
# 字符串形式的当前时间。默认格式是 “2003 - 07 - 08 16: 49:45, 896”。逗号后面的是毫秒
#
# %(thread)d
# 线程ID。可能没有
#
# %(threadName)s
# 线程名。可能没有
#
# %(process)d
# 进程ID。可能没有
#
# %(message)s
# 用户输出的消息
re模块
#Authon Ivor
def addition(a):
return str(round(float(a[0].strip())+float(a[1].strip()),5))
def subtraction(a):
return str(round(float(a[0].strip())-float(a[1].strip()),5))
def multiplication(a):
return str(round(float(a[0].strip())*float(a[1].strip()),5))
def division(a):
return str(round(float(a[0].strip())/float(a[1].strip()),5)) import re num = '''
请输入运算式:
1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )
>>>
'''
a = input(num)
a = a.replace(" ","")
while True:
b = re.search(r'\([^()]+\)',a)
if b:
c = re.search('\d+\.?\d*/(\+|\-)?\d+\.?\d*',b.group())
if c:
d = division(c.group().split("/"))
a = a.replace(c.group(),d)
continue
c = re.search('\d+\.?\d*\*(\+|\-)?\d+\.?\d*',b.group())
if c:
d = multiplication(c.group().split("*"))
a = a.replace(c.group(),d)
continue
c = re.search('\d+\.?\d*\-\d+\.?\d*',b.group())
if c:
d = subtraction(c.group().split("-"))
a = a.replace(c.group(),d)
continue
c = re.search('\d+\.?\d*\+\d+\.?\d*',b.group())
if c:
d = addition(c.group().split("+"))
a = a.replace(c.group(),d)
continue
c = re.search('\d+\.?\d*(\+|\-){2}\d+\.?\d*',b.group())
if c:
if "+-" in c.group():
a = a.replace(c.group(),c.group().replace("+-","-"))
if "--" in c.group():
a = a.replace(c.group(),c.group().replace("--","+"))
if "-+" in c.group():
a = a.replace(c.group(),c.group().replace("-+","-"))
if "++" in c.group():
a = a.replace(c.group(),c.group().replace("++","+"))
continue
if b and not c:
a = a.replace(b.group(),b.group().strip("()"))
continue
else:
if "+-" in a:
a = a.replace("+-","-")
if "--" in a:
a = a.replace("--","+")
if "-+" in a:
a = a.replace("-+","-")
if "++" in a:
a = a.replace("++","+")
b = re.search('\d+\.?\d*/(\+|\-)?\d+\.?\d*', a)
if b:
c = division(b.group().split("/"))
a = a.replace(b.group(),c)
continue
b = re.search('\d+\.?\d*\*(\+|\-)?\d+\.?\d*',a)
if b:
c = multiplication(b.group().split("*"))
a = a.replace(b.group(),c)
continue
b = re.search('\d+\.?\d*\-\d+\.?\d*', a)
if b:
c = subtraction(b.group().split("-"))
a = a.replace(b.group(),c)
continue
b = re.search('\d+\.?\d*\+\d+\.?\d*', a)
if b:
c = addition(b.group().split("+"))
a = a.replace(b.group(),c)
continue
print(a)
exit()
Python学习-day5 常用模块的更多相关文章
- Python学习 :常用模块(二)
常用模块(二) 四.os模块 os模块是与操作系统交互的一个接口,用于对操作系统进行调用 os.getcwd() # 提供当前工作目录 os.chdir() # 改变当前工作目录 os.curdir( ...
- Python学习笔记-常用模块
1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...
- Python学习 :常用模块(三)----- 日志记录
常用模块(三) 七.logging模块 日志中包含的信息应有正常的程序访问日志,还可能有错误.警告等信息输出 python的 logging 模块提供了标准的日志接口,你可以通过它存储各种格式的日志, ...
- python 学习分享-常用模块篇
模块 就是前人给你造的轮子,你开车就好!!! 常用模块有: time模块 random模块 os模块 sys模块 shutil模块 json & picle模块 shelve模块 xml处 ...
- python 学习day5(模块)
一.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能 ...
- Python学习 :常用模块(四)----- 配置文档
常用模块(四) 八.configparser 模块 官方介绍:A configuration file consists of sections, lead by a "[section]& ...
- Python学习 :常用模块(一)
常用模块(一) 一.时间(time)模块 时间戳 (Timestamp):时间戳表示的是从1970年1月1日00:00:00为计时起点,到当前的时间长度 import time print(help( ...
- 06 python学习笔记-常用模块(六)
一. 模块.包 1.什么是模块? Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,是用来组织代码的.模块能定义函数 ...
- Python学习之==>常用模块
一.string模块 import string print(string.ascii_letters) # 所有大小写字母 print(string.ascii_lowercase) # 所有小写字 ...
随机推荐
- Jquery ajax中表单提交被拦截的问题处理方法
在实际开发项目中,由于要做支付宝的批量退款处理,需要用到ajax中去提交表单数据,项目截图如下: 由于在第二张截图“确认退款”那里需要异步ajax提交数据到服务器处理信息,处理成功后将返回的数据装载到 ...
- Selenium3+webdriver学习笔记3(xpath方式元素定位)
#!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriver import time,os # about:ad ...
- CentOS7.2上安装Python3.6
CentOS 7下安装Python3.6 1)安装python3.6可能使用的依赖yum -y install openssl-devel bzip2-devel expat-devel gdbm-d ...
- 使用github进行代码托管
---恢复内容开始--- 记录下使用github进行个人代码托管,github是公共的代码托管库,可以免费使用,由于是公共的所以大家都可以查看,如果是隐私重要的文件代码可以选择付费变为私有库 1.注册 ...
- [windows]清除访问共享的用户和密码信息
方法一: 操作步骤:进入cmd命令界面-->输入:net use(查看列表)-->输入:net use * /delete(清空列表)-->输入:y 回车确认即可. [查看已记录的登 ...
- UVA 624 CD(01背包,要记录路径)
题意: 有n张CD(n<=20),每张能播放的时长不同.给定一个时长限制t,挑出部分的CD使得总播放时间最长.顺便输出路径! 思路: 重点在输出路径,否则这题很普通.那就要用二维数组记录每个CD ...
- Windows 7, Visual Studio 2015下编译Webkit
因工作需要,需要编译Windows版本的Webkit,中间走了不少弯路,都记录下来,供大家参考!也随时欢迎大家讨论(QQ群:345802342) 整个编译工作参考的是官方文档:https://webk ...
- GWTDesigner_v5.1.0破解码
GWTDesigner_v5.1.0_win32_x86.exe破解码,双击运行keygeno.jar,然后输入用户名.网卡MAC,然后单击Generate,将生成的文件放在C:\Documents ...
- volatile引发的一系列血案
最早读<深入理解java虚拟机>对于volatile部分就没有读明白,最近重新拿来研究并记录一些理解 理解volatile前需要把以下这些概念或内容理解: 1.JMM内存模型 2.并发编程 ...
- IntelliJ IDEA java设置程序运行时内存
Run/Edit Configurations Configuration/VM options 例如:设置运行内存为:-Xmx3m -Xms3m