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)