python 常用记录

all()

>>> a = [11,22,33]
>>> all(a)
>>> ture
对序列进行判断,如果全为真,则返回Ture
>>> a = [11,22,0]
>>> all(a)
>>> false
一旦有一个为空,返回false

datetime

>>> from datetime import datetime
>>> print datetime.now()
2016-08-18 10:33:21.218000
指定日期和时间
>>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建datetime
>>> print(dt)2015-04-19 12:20:00
datetime 转换为timestamp
>>> from datetime import datetime
>>> import time
>>> dt = datetime(2016, 8, 16, 10, 40)
>>> print time.mktime(dt.timetuple())
timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,
因为全球各地的计算机在任意时刻的timestamp都是完全相同的(假定时间已校准)。
timestamp 转换为datetime
>>> from datetime import datetime
>>> t = 1429417200.0
>>> print(datetime.fromtimestamp(t))
字符串转换为datetime
>>> from datetime import datetime
>>> t = '2016-8-16 10:40:38'
>>> day = datetime.strptime(t,'%Y-%m-%d %H:%M:%S')
>>> print day
>>> 2016-08-16 10:40:38

datetime 转换为str
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now.strftime('%a, %b %d %H:%M'))
Mon, May 05 16:28

python 跨进程锁的实现-fcntl

首先先介绍fileObject.fileno(); 这个方法
此方法返回整数的底层实现使用请求从操作系统的I / O操作的文件描述符.
#!/usr/bin/python
#coding:utf-8

f = open('lock.txt','a+')
print f.fileno()
print f.name
f.close()
3
lock.txt

fcntl这次应用于对pid file的书写

flock() : flock(f, operation)
  operation : 包括:
    fcntl.LOCK_UN 解锁
    fcntl.LOCK_EX  排他锁
    fcntl.LOCK_SH  共享锁
    fcntl.LOCK_NB  非阻塞锁
LOCK_SH 共享锁:所有进程没有写访问权限,即使是加锁进程也没有。所有进程有读访问权限。
LOCK_EX 排他锁:除加锁进程外其他进程没有对已加锁文件读写访问权限。
LOCK_NB 非阻塞锁:
fcntl.LOCK_EX | fcntl.LOCK_NB这种应用是,当获取到文件有锁的信息,程序直接except
def write_pid()
    f = open(pidfile, "a+")
    try:
        fcntl.flock(f.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
    except IOError:
        print "Can not write pid into: ", pidfile
        return False
    f.truncate()   #将文件内容清除
    f.write(str(os.getpid()))
    f.flush()
    f.seek(0)
    f.close()
    return True

logging 日志输出

模块提供 filter, logger, hanlder, formatter
可以通过logging.getLogger(name)获取logger对象
handler:将日志记录(log record)发送到合适的目的地(destination),比如文件,socket等。一个logger对象可以通过addHandler方法添加0到多个handler,
每个handler又可以定义不同日志级别,以实现日志分级过滤显示。
filter:提供一种优雅的方式决定一个日志记录是否发送到handler。
        formatter:指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。


import logging
from logging.handlers import TimedRotatingFileHandler
import datetime
file = "ogent_" + datetime.datetime.now().strftime('%b-%d-%y') + ".log"
path_to_file = 'C:\\Users\\ma\\PycharmProjects\\ma\\modle\\'
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.propagate = False   #这是一个布尔标志,用于指示消息是否传播给父记录器
logFormatter = logging.Formatter('%(asctime)s %(filename)12s:%(lineno)4d %(levelname)-6s %(message)s')  #规定日志格式
logHandler = TimedRotatingFileHandler(path_to_file + file,when='midnight')   #规定时间重新创建log,“midnight”: Roll over at midnight
logHandler.setLevel(logging.DEBUG)
logHandler.setFormatter(logFormatter)
logger.addHandler(logHandler)
keep_fds = [logHandler.stream.fileno()]

TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
when 是一个字符串的定义如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight
interval 是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建
取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以
有些情况suffix要定义的不能因为when而重复。
backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设10,则在文件的创建过程中
库会判断是否有超过这个10,若超过,则会从最先创建的开始删除。

format格式化字符串

通过位置
print '{0},{1}:{0}'.format('ma','test')
ma,test:ma
通过关键字
print '{name},{id}'.format(name='ma',id='test')
ma,test
通过对象属性
class Format(object):
   def __init__(self,name,age):
      self.Name = name
      self.Age = age
   def __str__(self):
      return 'The guy is {self.Name} , is {self.Age} years old'.format(self=self)
      
The guy is kzc , is 18 years old

原创文章,作者:心肝坏了,如若转载,请注明出处:http://www.178linux.com/37154

(0)
心肝坏了心肝坏了
上一篇 2016-09-19 13:48
下一篇 2016-09-19 13:48

相关推荐

  • Samba & Vsftp

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;   3)添加s…

    Linux干货 2016-12-20
  • vim编辑器进阶

    1、vim介绍    vim(Visual Interface Improved)是一款异常强大的文本编辑器,如果大家对它的认识还停留在编辑文件,再退出的阶段的话,那就太对不起vim了,反倒不如用nano来的爽快。不过学习vim刚开始的阶段必然是痛苦的,如果想要一蹴而就,那就是你想多了。所以还需大家结合实际情况,勤加练习,认真揣摩。这里是…

    Linux干货 2016-08-11
  • 用户、组命令总结

    useradd:添加用户   -u :指定UID   -o :不对UID的惟一性进行检查,用法是-ou   -g :指定用户的主组或者是GID   -G :指定用户的附加组group1,group2,。。。   -d :指定用户的家目录,所指定的家目录必须是不存在的   -s :指定用户的登录she…

    Linux干货 2016-11-23
  • 终于成为马帮的成员了

    终于成为马帮的成员了

    Linux干货 2016-09-18
  • Shell脚本编程中的if、case、for、while、until命令

    为何要学编程中的if、case、for、while、until命令?        作为一个运维工程师,总会听到自动化,实际自动化离不开编写shell脚本,而shell脚本中却又离不开编程中的if、case、for、while、until, 这些关键字。 了解编程中的if、case、for、while、until命令,…

    Linux干货 2016-08-19
  • linux 文件管理命令

    目录与路径    1.相对路径与绝对路径 因为我们在Linux系统中,常常要涉及到目录的切换,所以我们必须要了解 "路径" 以及 "相对路径" 与 "绝对路径" 的概念。在之前的学习中,就反复的强调了Linux的目录是 "树状目录" 。假设我们需要在任意一个目…

    Linux干货 2016-11-06