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

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

相關推薦

  • Haproxy的基礎應用!

            本篇博客主要是和大家共同了解一下Haproxy的功能與基礎應用,目的是更加熟練的掌握Haproxy的工作原理,為將來的工種中做好鋪墊!       本篇博客共分為兩個部分:      …

    2017-05-16
  • 三劍客之sed

    sed命令:Stream EDitor 流編輯器 sed命令的工作流程:     sed會復制原文件中的一行或者多行,逐行進行操作。首先會將該行的內容放入到模式空間內,在模式空間內進行定界或者正則表達式匹配操作。     a.如果該行內容不符合正則表達式或定界,該內容則被判斷為No,進行標準輸出。 &nbsp…

    Linux干貨 2016-08-08
  • N25-第十一周博客作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 點對點加密過程如下: 發送方根據單向加密算法計算數據的特征碼 用私鑰加密這段特征碼,生產數字簽名,將數字簽名附著在數據后面 發送方生產臨時對稱密鑰,用對稱加密算法結合對稱加密密鑰加密整段數據(數據+數字簽名) 為保證接收方可以解密,發送方用接收方的公鑰加密對稱加密密鑰,附加在數據后面 接收方用自己的私鑰解密數據…

    Linux干貨 2017-03-30
  • 馬哥教育網絡21期+第九周練習博客

    馬哥教育網絡21期+第九周練習博客 1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; [root@localhost bin]# cat 1.sh  #!/bin/bash # while&nbsp…

    Linux干貨 2016-09-05
  • Linux計劃任務

    計劃任務 工作當中有時候需要將某件事情在未來的某個特定的時間執行,而自己確不在機器旁,該如何是好?像這樣在每天特定的時間內去安排做一些事情這樣,一種事情我們就稱之為例行性的計劃任務,其實在我們的操作系統當中都有類似的例行性任務計劃功能,那如何去像設定鬧鐘一種在Linux上指定例行性計劃任務并實施,主要有兩種工具:at和crontab   計劃任務分…

    Linux干貨 2016-09-19
  • N22第八周作業

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋: 網橋是早期的二層網絡設備,每個端口分別有一條獨立的交換信道,不是共享一條信道,可隔離沖突域。網橋比集線器(Hub)性能更好,集線器上各端口都是共享同一條信道的,工作于數據鏈路層。后被端口更多的交換機替代。 集線器: 多端口中繼器,工作在物理層,本身不具備識別信號的能力,只…

    Linux干貨 2016-10-17
欧美性久久久久