datetime模块
获取当前日期和时间
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now)
2018-04-25 09:01:40.674081
>>> print(type(now))
>>>
注意到datetime模块下还有一个datetime类,通过from datetime import datetime
导入的才是datetime类。
import datetime
now=datetime.datetime.now()
print(now)
%Y 带世纪部分的十制年份
%m 十进制表示的月份
%d 十进制表示的每月的第几天
%H 24小时制的小时
%M 十时制表示的分钟数
%S 十进制的秒数
from datetime import datetime
y=datetime.now().year #年
m=datetime.now().month #月
d=datetime.now().day #日
获取指定的某个时间和日期
>>> dt = datetime(2018,4,19,12,20)
>>> print(dt)
2018-04-19 12:20:00
datetime转换成时间戳timestamp
在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。
>>> dt.timestamp()
1524111600.0
>>>
注意到timestamp()是一个浮点数,如果有小数位,小数位表示毫秒数。
时间戳timestamp转换成datetime
>>> t
1524111600.0
>>> dt = datetime.fromtimestamp(t)
>>> print(dt)
2018-04-19 12:20:00
要把时间戳timestamp
转换成datetime
,使用datetime
提供的fromtimestamp
函数
注意到timestamp是一个浮点数,它没有时区的概念,而datetime是有时区的。上述转换是在timestamp和本地时间做转换,本地时间是指当前操作系统设定的时区。
timestamp 时间戳也可以直接被转换为UTC标准时间:
>>> t
1524111600.0
>>> print(datetime.utcfromtimestamp(t))
2018-04-19 04:20:00
str转换为datetime格式
很多时候用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换成datetime。转换方法通过datetime.strptime()
,需要一个日期和时间的格式化字符串。
>>> day = datetime.strptime('2018-6-6 06:19:59','%Y-%m-%d %H:%M
:%S')
>>> print(day)
2018-06-06 06:19:59
datetime转str
将datetime对象转换为字符串,展现给用户看;需要通过strftime()
方法实现,同样需要一个日期和时间的格式化字符串:
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 4, 25, 10, 47, 17, 272683)
>>> print(now.strftime('%Y-%m-%d %H:%M:%S'))
2018-04-25 10:47:17
datetime加减
对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+
和-
运算,不过需要导入timedelta
这个类:
>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2015, 5, 18, 16, 57, 3, 540997)
>>> now + timedelta(hours=10)
datetime.datetime(2015, 5, 19, 2, 57, 3, 540997)
>>> now - timedelta(days=1)
datetime.datetime(2015, 5, 17, 16, 57, 3, 540997)
>>> now + timedelta(days=2, hours=12)
datetime.datetime(2015, 5, 21, 4, 57, 3, 540997)
os模块
>>> import os
>>> os.name #系统的名称
'nt'
>>>
nt 代表的是windows系统
posix 代表的是linux系统
执行系统命令
os.system(cmd) #执行系统命令,但是没有返回结果
result = os.popen(cmd).read() #这样就可以对reuslt进行控制了
print(result)
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r“c:\python”)
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检查是否快捷方式os.path.islink ( filename )
检验给出的路径是否真地存:os.path.exists()
#判断文件是否存在
if not os.path.exists("test"):
os.mkdir("test")
sys 系统模块
import sys
f = open("2.log","w")
sys.stdout=f #不会打印“hello world”,会写入1.log文件内
print("hello world")
注意 stdout 相当于开放io 输出到文件中
日志记录 logging模块
默认情况下:logging将日志打印到屏幕;
日志的几个级别:
debug
● INFO:确认一切按预期运行
● WARNING:一个警告,可能会有一些意想不到的事情发生了,或表明
一些问题在不久的将来(例如。磁盘空间低”)。这个软件还能按预期工作
● ERROR:个更严重的问题,软件没能执行一些功能
● CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行
import logging
logger = logging.debug("this is debug")
logger = logging.info("this is info")
logger = logging.warning("this is warning")
logger = logging.error("this is error")
logger = logging.critical("this is critical")
运行结果:
WARNING:root:this is warning
ERROR:root:this is error
CRITICAL:root:this is critical
默认情况下,只打印warning以上的级别
如果需要设置打印出来的级别可以通过logging.basicConfig()
方法:
logging.basicConfig(level=logging.DEBUG)
logging.basicConfig
函数各参数:
filename:指定日志文件名;
filemode:和file函数意义相同,指定日志文件的打开模式,'w'或者'a';
format:指定输出的格式和内容,format可以输出很多有用的信息,
参数:作用
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息
datefmt:指定时间格式,同time.strftime();
level:设置日志级别,默认为logging.WARNNING;
stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略;
import logging
#配置基本信息
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s')
logger = logging.getLogger(__name__)
logger.debug("this is debug")
logger.info("this is info")
logger.warning("this is warning")
logger.error("this is error")
logger.critical("this is critical")
运行结果:
2018-04-25 22:01:50,934-__main__-DEBUG-this is debug
2018-04-25 22:01:50,965-__main__-INFO-this is info
2018-04-25 22:01:50,965-__main__-WARNING-this is warning
2018-04-25 22:01:50,965-__main__-ERROR-this is error
2018-04-25 22:01:50,965-__main__-CRITICAL-this is critical
将日志写到文件
日志写到指定的文件中,只需添加一个参数:filename=
import logging
#设置filename 日志保存的路径
logging.basicConfig(level=logging.DEBUG,filename='log1.txt',format='%(asctime)s-%(name)s-%(levelname)s-%(message)s')
logger = logging.getLogger(__name__)
logger.debug("this is debug")
logger.info("this is info")
logger.warning("this is warning")
logger.error("this is error")
logger.critical("this is critical")
运行的结果:
random模块
random.random() #0-1
random.randint(a, b) #a<=n<=b 整型
random.uniform(10, 20) #10
random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。