Python 常用模块

 os

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.mknod("test.txt")        创建空文件
os.rename("oldname","newname")  重命名文件/目录
os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"	
",Linux下为"
"
os.pathsep    输出用于分割文件路径的字符串
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)  返回文件大小
os.path.normcase('/DasdASD/asdasdA/')   跨平台转换路径,转换大写为小写
os.path.normcase(os.path.join(os.path.dirname(os.path.abspath(__file__)),os.path.pardir))
os.get_terminal_size()  获取终端大小
os.chmod('jjj',0700)  权限
os.chown('jjj',UID,GID)  属主属组
os.stat('path/filename')  获取文件/目录信息
f = open('aaa.log')
f2 = open('bbb.log', 'w')
 shutil.copyfileobj(f, f2, length=3*1024)  # 将文件内容拷贝到另一个文件
shutil.copyfile('aaa.log', 'bbb.log')  # 同上
shutil.copymode('aa', 'bb')  # 拷贝权限,内容、用户、组不变
shutil.copytree(src, dst, ignore=shutil.ignore_patterns('atm'))  # 递归复制目录
shutil.rmtree('asd')  # 删除目录
shutil.make_archive("压缩包名", "zip", "要压缩的目录")  # 压缩文件

time

t = time.localtime(time.time()-86400)  # 返回本地时间
print(t.tm_year, t.tm_mon)
# 时间戳
time.time()

# 格式化前一天时间
t = time.localtime(time.time()-86400) 
time.strftime('%Y/%m/%d %H:%M:%S %W', t)

# 日期字符串转换成时间对象
time_str = '2019-11-12 11:11:11'
f = time.strptime(time_str, '%Y-%m-%d %H:%M:%S')
print(f)
# time.struct_time(tm_year=2019, tm_mon=11, tm_mday=12, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=1, tm_yday=316, tm_isdst=-1)

# 将时间对象转换成时间戳
print(time.mktime(f))
# 将时间戳转为字符串格式
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

datetime

import datetime
print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
print(datetime.datetime.now() )
print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 时间对象与字符串互转
datetime.datetime.fromtimestamp(141456567)  时间对象与时间戳互转
time.mktime(datetime.datetime.now().timetuple())  转换成秒

random 随机数

import random
print ('小于1的随机浮点数:', random.random())
print ('指定范围内的随机浮点数:', random.uniform(20,30))
print ('指定范围内的随机整数:', random.randint(1,2))
print ('按指定步长集合中获取一个随机数', random.randrange(1,10,3))  # 步长
print (random.randrange(1,10))  # 不包含10
print('获取指定长度的序列: ', random.sample([1,2,3,4,5],3))  # 返回随机列表

zip

接收多个序列作为参数,返回一个元组列表

x = [1, 2, 3]
y = [4, 5, 6,444]
z = [7, 8, 9]
xyz = zip(x, y, z)
list(xyz) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
x = [1, 2, 3]
r = zip(* [x] * 3)
list(r) # [(1, 1, 1), (2, 2, 2), (3, 3, 3)]

string 字符串处理

import string
print('小写字母: ',string.ascii_lowercase)
print('大写字母: ', string.ascii_uppercase)
print('大写和小写字母: ', string.ascii_letters)
print('数字: ', string.digits)
print('所有符号: ', string.printable)

序列化 json与pickle

  • JSON是文本形式的存储,Pickle则是二进制形式(至少常用二进制)
  • JSON是人可读的,Pickle不可读
  • JSON广泛应用于除Python外的其他领域,Pickle是Python独有的。
  • JSON只能dump一些python的内置对象,Pickle可以存储几乎所有对象。
在我看来,如果偏向应用特别是web应用方面,可以常用JSON格式。如果偏向算法方面,尤其是机器学习,则应该使用cPickle,pylearn2库中保存model就是使用这项技术的

有如下对象

data = {
    'id': 1234,
    'credit': 15000,
    'balance': 8000,
    'create_date': '2015-04-04'
}
pickle
 
dumps and loads
t = pickle.dumps(data)  # data type is obj
t2 = pickle.loads(t)  # t type is str
print('t: ', type(t),t)
print('t2: ', type(t),t2)
返回:
t:  <class 'bytes'> b'x80x03}qx00(Xx06x00x00x00creditqx01Mx98:Xx07x00x00x00balanceqx02M@x1fXx0bx00x00x00create_dateqx03X
x00x00x002015-04-04qx04Xx02x00x00x00idqx05Mxd2x04u.'
t2:  <class 'bytes'> {'credit': 15000, 'balance': 8000, 'create_date': '2015-04-04', 'id': 1234}
dump and load
with open('test', 'wb') as f:
    pickle.dump(data, f)
# pickle对象(字符串)-->python对象  从文件读取
with open('test', 'rb') as f:
    ret = pickle.load(f)
    print('pickle.load: ', ret)
json
json只支持 str int float set dict list tuple
 dumps and loads
json_dumps = json.dumps(data)  # 对象-->字符串
json_loads = json.loads(json_dumps)  # 字符串-->对象
print('json_dumps ', type(json_dumps),json_dumps)
print('json_loads ', type(json_loads),json_loads)
返回:
json_dumps  <class 'str'> {"create_date": "2015-04-04", "balance": 8000, "credit": 15000, "id": 1234}
json_loads  <class 'dict'> {'balance': 8000, 'credit': 15000, 'create_date': '2015-04-04', 'id': 1234}

dump and load

# 对象-->字符串,保存到文件
with open('test', 'w') as f:
    json.dump(data, f)
# 从文件中读取,字符串-->对象,
with open('test', 'r') as f:
    ret = json.load(f)
    print(ret)  # return:{'credit': 15000, 'id': 1234, 'create_date': '2015-04-04', 'balance': 8000}
 

PyYAML

import yaml
# 反序列化, 从文件中读取数据, 转成字典对象,
data_dic = yaml.load(open("salt",encoding="utf-8"))
print(type(data_dic))
# 序列化, 字段对象转成字符串
data_bytes = yaml.dump(data_dic,
            default_flow_style=False,  # 风格之类的,以最简单的方式显示就行了
            indent=4,
            encoding='utf-8',   # 设置编码
            allow_unicode=True   # 不是转化成unnicode形式
            )
with open("rrr","wt", encoding="utf-8") as f:
    f.write(str(data_bytes, encoding="utf-8"))
 

haslib

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

m = hashlib.md5()
m.update(bytes('asd',encoding='utf-8'))
print(m.hexdigest())
 

struct 数据打包解包

d=40
struct.pack('i',b)  # 打包
b'(x00x00x00'
s = struct.pack('i',b)
struct.unpack('i',s)  # 解包
(40,)
 

base64

import base64  
import StringIO  
a = "this is a test"
b = base64.encodestring(a) # 对字符串编码  
print b  
print base64.decodestring(b) # 对字符串解码  
c = StringIO.StringIO()  
c.write(a)  
d = StringIO.StringIO()  
e = StringIO.StringIO()  
c.seek(0)  
base64.encode(c, d) # 对StringIO内的数据进行编码  
print d.getvalue()  
d.seek(0)  
base64.decode(d, e) # 对StringIO内的数据进行解码  
print e.getvalue()  
a = "this is a +test"
b = base64.urlsafe_b64encode(a) # 进行url的字符串编码  
print b  
print base64.urlsafe_b64decode(b) 
上面的encode函数和decode函数的参数也可以是文件对象:
f1 = open('aaa.txt', 'r')  
f2 = open('bbb.txt', 'w')  
base64.encode(f1, f2)  
f1.close()  
f2.close() 
 

sched

定时任务

import time, os, sched
schedule = sched.scheduler(time.time, time.sleep)
#schedule.enter(延迟, 优先级, 回调函数, (参数1, 参数2))
def perform_command(cmd, inc):
    # 安排inc秒后再次运行自己,即周期运行
    schedule.enter(inc, 0, perform_command, (cmd, inc))  
    os.system(cmd)
def timming_exe(cmd, inc=60):
    # enter用来安排某事件的发生时间,从现在起第 10 秒开始启动
    schedule.enter(10, 0, perform_command, (cmd, inc))
    # 持续运行,直到计划时间队列变成空为止
    schedule.run()
print("show time after 10 seconds:")
timming_exe("echo %time%", 2)
 
原文地址:https://www.cnblogs.com/hanqian/p/7677762.html