一, impoert time 模块
简单的说了解两个过程: (1)时间戳时间 ==(localtime)==> 结构化时间 ==(strftime)==> 字符串,格式化时间
ret = time.localtime(20000000) ret1 = time.strftime('%Y-%m-%d %H:%M:%S',ret) print(ret1) 指定时间戳格式化
ret = time.localtime() ret1 = time.strftime('%Y-%m-%d %H:%M:%S',ret) print(ret1) print(ret1) 默认本地时间戳格式化
print(time.strftime('%Y-%m-%d %H:%M:%S')) 默认本地时间戳格式化
print(time.time) 查找当地时间戳时间 time.sleep(2) 计时方法,括号内参数为秒
(2)字符串,格式化时间 ==(strptime)==> 结构化时间 ==(mktime)==> 时间戳时间
s1 = '2018-6-19' ret = time.strptime(s1,'%Y-%m-%d') ret1 = time.mktime(ret) print(ret1) 普通查找指定字符串时间戳
ret = time.strftime('%Y-%m-1') ret1 = time.strptime(ret,'%Y-%m-%d') print(time.mktime(ret1)) 特定查找每月一号时间戳
二,import sys 模块
sys.path 返回模块的搜索路径 sys.moudles 返回启动python后所有导入的模块和py文件,是个大字典,__main__显示的是当前执行文件或模块
注意: sys.argv 返回命令行参数的列表,第一个元素是执行文件所在的路径,在cmd界面启动时,用这个命令进行调试时,多半会用到,利用列表索引赋值
如: name = sys.argv[1] pwd = sys.argv[2]
if name == 'alex' and pwd == 'alex3714': print('执行以下代码')
else: exit()
sys.exit() 结束程序 sys.platform 返回操作系统平台名称,不怎么准 sys.version 获取Python解释程序的版本信息
三,import os 模块
重要的知识点: os.mkdir('day1day2') ====> 创建路一个文件,若day1存在,则创建,不存在则不创建
os.makedirs('day1day2') ====> 创建多层递归目录 若文件夹存在没有文件则覆盖, 若文件夹存在且有文件,就停止 若果文件夹不存在则创建
os.rmdir('day1') ===> 删除单级空目录,若目录不为空则无法删除
os.removedirs('day1day2') ===> 若目录为空,则删除,并递归到上一层目录,若空,则删除.若有文件则停止
os.listdir('day1') ===> 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove(要删除的文件) ====> 删除一个文件
os.rename('老名','新名') ====> 重命名文件目录
使用python和操作系统命令交互:
os.system ('bash command') ===> 运行shell 命令,直接显示
os.popen ('bash command').read() ===> 运行shell命令,获取执行结果,可以读取
os.environ ===> 获取系统环境变量
win与linux(mac)的差异命令 : 这些差异的路径,和符号,可以运用到程序中,让整个程序可以有更好的适用性
os.stat() ===> 获取文件目录信息
os.sep ===> 输出操作系统特定的路径分隔符 win下为'\', linux 下为'/'
os.linesep ===> 输出当前操作系统特定的路径分隔符 win下为' ' linux下为' '
os.pathsep ===>输出用于分割文件路径的字符串 win下为; linux下为:
os.name ====>输出当前使用的平台 win下为'nt' linux下为'posix'
os.path 系列命令: os.path.abspath(路径) 将路径的符号规范化绝对路径 ,括号内放的是要整理的路径,相队路径会返回双路径
os.path.dirname(路径) 返回路径最后文件的上层目录, ,多次使用,就多次返回,知道取到根目录停止
os.path.basename(路径) 返回路径最后文件 能查询,不能做修改
os.path.split(路径) 默认将路径的最后一个文件与前面的路径分开,并放在元组中
os.path.isfile(路径) 若路径是个存在的文件,返回True, 若不是则返回False
os,path,isdir(路径) 若路径是个存在的目录, 返回True, 若不是则返回False
os.path.join(路径,目录,文件,文件) 这里有坑,注意如果括号内有绝对路径,那么绝对路径之前的目录或者文件将被忽略.只能有一个绝对路径
如果有多个,则取最后一个绝对路径和绝对路径后面的参数组合
os.path.getatime(路径) 返回路径所指向的文件或目录的最后访问时间 注意:拿到的时间都是一个时间戳时间,需要转成字符串格式化
os.path.getmtime(路径) 返回路径所指向的文件或目录的最后修改时间 注意:拿到的时间都是一个时间戳时间,需要转成字符串格式化
os.path.getsize(路径) 返回路径的大小 这里要注意的是大小指的是字节,文件夹的大小固定是4096,文件的大小不固定
os.path 了解命令: os.path.exists(路径) 如果路径存在,返回True,若不存在,返回False
os.path.isabs(路径) 如果路径是绝对路径,返回True
四,序列化: 处理数据得到一个字符串的结果,就是序列化 ====>方法模块 json pickle shelve
应用:(1)处理文件需要序列化 (2)网络传输数据需要序列化
json: dumps loads 处理数据,单独处理数据(处理列表,字符串,字典,元组)
注意:字典里的key必须是字符串类型,如果是数字,序列化后会自动转换成字符串类型,处理完后的字典key是双引号
字典里值是元组时,序列化后会强制转化为列表类型,当然了,元组在序列化时不能当作key使用
可以多次dump数据到文件里,可以多次dump但是不能load回来了,普通的write逐行写入,再逐行load就可以.
如: dic = {'k1':'v1'} str_dic = json.dumps(dic) print(type(str_dic),str_dic) #将字典序列化成字符串
dic = {'k1':'v1'} ret = json.loads(str_dic) print(type(ret),ret) #将序列化的字符串转化成原类型
dump load 可以同时处理数据,处理文件
如: dic = {'aaa':'bbb'} with open('json_dump2','w') as f: json.dump(dic,f) #将文件序列化并写入文件
with open('json_dump2') as f: print(type(json.load(f))) #将文件读出来,并反序列化
pickle: dumps, loads 的结果是bytes, 所以关于pickle模块的文件操作要用 b 模式, 包括 'wb' 'rb'
支持几乎所有的对象的序列化
对于对象的序列化,要求对象的类在内从中
多次dump 和 load 做了良好的处理, 反序列化读取的时候通过异常处理,可以循环多次取出多次dump在文件内的内容
import pickle class Studen: def __init__(self,name,age): self.name = name self.age = age p1 = Studen('高',16) ret = pickle.dumps(p1) print(pickle.loads(ret).name) with open('pickle_demo','wb') as f: #将对象序列化成Byte写到文件中 pickle.dump(p1,f) with open('pickle_demo','rb') as f1: #反序列化读取状态,适合游戏读挡 print(pickle.load(f1).age)
shelve: 如果你写了一个文件,改动的比较少,读取的比较多,且你大部分的读取需要某个key获得某个value,那就用shelve
import shelve f = shelve.open('shelve_file') f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'} #直接对文件句柄操作,就可以存入数据 f.close() import shelve f1 = shelve.open('shelve_file') existing = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错 f1.close() print(existing)