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.www58058.com/37154