模塊的基礎知識

1,基本庫模塊html

2,第三方模塊python

3,應用程序自定義庫模塊git

 

Python日期格式化知識

 

Python中日期格式化是很是常見的操做,Python 中能用不少方式處理日期和時間,轉換日期格式是一個常見的功能。Python 提供了一個 time 和 calendar 模塊能夠用於格式化日期和時間。時間間隔是以秒爲單位的浮點小數。每一個時間戳都以自從格林威治時間1970年01月01日00時00分00秒起通過了多長時間來表示。正則表達式

注: 如下代碼在Python3下運行經過, Python2下未經測試, 如遇問題能夠下方留意。算法

1. 基本方法

獲取當前日期:time.time()shell

獲取元組形式的時間戳:time.local(time.time())編程

格式化日期的函數(基於元組的形式進行格式化):數組

(1)time.asctime(time.local(time.time()))bash

(2)time.strftime(format[,t])app

將格式字符串轉換爲時間戳:

time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')

延遲執行:time.sleep([secs]),單位爲秒

2. 格式化符號

python中時間日期格式化符號:

%y 兩位數的年份表示(00-99)

%Y 四位數的年份表示(000-9999)

%m 月份(01-12)

%d 月內中的一天(0-31)

%H 24小時制小時數(0-23)

%I 12小時制小時數(01-12) 

%M 分鐘數(00=59)

%S 秒(00-59)

 

%a 本地簡化星期名稱

%A 本地完整星期名稱

%b 本地簡化的月份名稱

%B 本地完整的月份名稱

%c 本地相應的日期表示和時間表示

%j 年內的一天(001-366)

%p 本地A.M.或P.M.的等價符

%U 一年中的星期數(00-53)星期天爲星期的開始

%w 星期(0-6),星期天爲星期的開始

%W 一年中的星期數(00-53)星期一爲星期的開始

%x 本地相應的日期表示

%X 本地相應的時間表示

%Z 當前時區的名稱

%% %號自己 

3. 經常使用用法

3.1 將字符串的時間轉換爲時間戳

方法:

1
2
3
4
5
6
7
import  time
=  "2017-11-24 17:30:00"
#將其轉換爲時間數組
timeStruct  =  time.strptime(t,  "%Y-%m-%d %H:%M:%S" )
#轉換爲時間戳:
timeStamp  =  int (time.mktime(timeStruct))
print (timeStamp)

結果:

1511515800

 

3.2 時間戳轉換爲指定格式日期

代碼:

1
2
3
4
timeStamp  =  1511515800
localTime  =  time.localtime(timeStamp)
strTime  =  time.strftime( "%Y-%m-%d %H:%M:%S" , localTime)
print (strTime)

結果:

2017-11-24 17:30:00

 

3.3 格式切換

把-分割格式2017-11-24 17:30:00  轉換爲斜槓分割格式: 結果:2017/11/24 17:30:00

代碼:

1
2
3
4
5
6
import  time
=  "2017-11-24 17:30:00"
#先轉換爲時間數組,而後轉換爲其餘格式
timeStruct  =  time.strptime(t,  "%Y-%m-%d %H:%M:%S" )
strTime  =  time.strftime( "%Y/%m/%d %H:%M:%S" , timeStruct)
print (strTime)

結果:

2017/11/24 17:30:00

 

3.4 獲取當前時間並轉換爲指定日期格式

1
2
3
4
5
6
7
import  time
#得到當前時間時間戳
now  =  int (time.time())
#轉換爲其餘日期格式,如:"%Y-%m-%d %H:%M:%S"
timeStruct  =  time.localtime(now)
strTime  =  time.strftime( "%Y-%m-%d %H:%M:%S" , timeStruct)
print (strTime)

結果:

2017-11-24 18:36:57

 

3.5 得到三天前的時間的方法

1
2
3
4
5
6
7
8
9
import  time
import  datetime
#先得到時間數組格式的日期
threeDayAgo  =  (datetime.datetime.now()  -  datetime.timedelta(days  =  3 ))
#轉換爲時間戳:
timeStamp  =  int (time.mktime(threeDayAgo.timetuple()))
#轉換爲其餘字符串格式:
strTime  =  threeDayAgo.strftime( "%Y-%m-%d %H:%M:%S" )
print (strTime)

結果:

2017-11-21 18:42:52

 

注:timedelta()的參數有:days,hours,seconds,microseconds

 

3.6 使用datetime模塊來獲取當前的日期和時間

1
2
3
4
5
6
7
8
9
10
11
import  datetime
=  datetime.datetime.now()
print  ( "當前的日期和時間是 %s"  %  i)
print  ( "ISO格式的日期和時間是 %s"  %  i.isoformat() )
print  ( "當前的年份是 %s"  % i.year)
print  ( "當前的月份是 %s"  % i.month)
print  ( "當前的日期是 %s"  % i.day)
print  ( "dd/mm/yyyy 格式是  %s/%s/%s"  %  (i.day, i.month, i.year) )
print  ( "當前小時是 %s"  % i.hour)
print  ( "當前分鐘是 %s"  % i.minute)
print  ( "當前秒是  %s"  % i.second)

time模塊:

time.localtime    本地時間

time.gmtime  世界時間

time.strftime("%Y-%m-%d:%X",time.localtime)

time.strftime("2018:12:12:0:0:0","%Y:%m:%d:%X" )

time.ctime

time.asctime

datetime模式

datetime.dateime.now()

-----------------

random模塊

def roll():
    ret = ""
    for i in range(5):
        num = random.randint(0,9)
        alt_m = chr(random.randint(65,90))
        alt_D= chr(random.randint(97,120))
        s =str(random.choice([num,alt_m,alt_D]))
        ret += s
    return ret

 OS模塊------------------------------------

os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑
os.chdir("dirname")  改變當前腳本工做目錄;至關於shell下cd
os.curdir  返回當前目錄: ('.')
os.pardir  獲取當前目錄的父目錄字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄
os.removedirs('dirname1')    若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推
os.mkdir('dirname')    生成單級目錄;至關於shell中mkdir dirname
os.rmdir('dirname')    刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname
os.listdir('dirname')    列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印
os.remove()  刪除一個文件
os.rename("oldname","newname")  重命名文件/目錄
os.stat('path/filename')  獲取文件/目錄信息
os.sep    輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/"
os.linesep    輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n"
os.pathsep    輸出用於分割文件路徑的字符串
os.name    輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bash command")  運行shell命令,直接顯示
os.environ  獲取系統環境變量
os.path.abspath(path)  返回path規範化的絕對路徑
os.path.split(path)  將path分割成目錄和文件名二元組返回
os.path.dirname(path)  返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path)  返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path)  若是path存在,返回True;若是path不存在,返回False
os.path.isabs(path)  若是path是絕對路徑,返回True
os.path.isfile(path)  若是path是一個存在的文件,返回True。不然返回False
os.path.isdir(path)  若是path是一個存在的目錄,則返回True。不然返回False
os.path.join(path1[, path2[, ...]])  將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略
os.path.getatime(path)  返回path所指向的文件或者目錄的最後存取時間
os.path.getmtime(path)  返回path所指向的文件或者目錄的最後修改時間
 
-----SYS模塊-----------
 
sys.argv           命令行參數List,第一個元素是程序自己路徑
sys.exit(n)        退出程序,正常退出時exit(0)
sys.version        獲取Python解釋程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform       返回操做系統平臺名稱
sys.stdout.write('please:')
val = sys.stdin.readline()[:-1]

 ----------RE模塊---------

'.'     默認匹配除\n以外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行
'^'     匹配字符開頭,若指定flags MULTILINE,這種也能夠匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'     匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也能夠
'*'     匹配*號前的字符0次或屢次,re.findall("ab*","cabb3abcbbac")  結果爲['abb', 'ab', 'a']
'+'     匹配前一個字符1次或屢次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb']
'?'     匹配前一個字符1次或0次
'{m}'   匹配前一個字符m次
'{n,m}' 匹配前一個字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb']
'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 結果'ABC'
'(...)' 分組匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c
 
 
'\A'    只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z'    匹配字符結尾,同$
'\d'    匹配數字0-9
'\D'    匹配非數字
'\w'    匹配[A-Za-z0-9]
'\W'    匹配非[A-Za-z0-9]
's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t'

'(?P<name>...)'  分組匹配
re.search( "(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})" , "371481199306143242" ).groupdict( "city" ) 結果{ 'province' '3714' 'city' '81' 'birthday' '1993' }
 
 

  最經常使用的一些方法

re.match 從頭開始匹配

re.search 匹配包含
re.findall 把全部匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符當作列表分隔符
re.sub      匹配字符並替換

反斜槓的困擾
與大多數編程語言相同,正則表達式裏使用"\"做爲轉義字符,這就可能形成反斜槓困擾。假如你須要匹配文本中的字符"\",那麼使用編程語言表示的正則表達式裏將須要4個反斜槓"\\\\":前兩個和後兩個分別用於在編程語言裏轉義成反斜槓,轉換成兩個反斜槓後再在正則表達式裏轉義成一個反斜槓。Python裏的原生字符串很好地解決了這個問題,這個例子中的正則表達式能夠使用r"\\"表示。一樣,匹配一個數字的"\\d"能夠寫成r"\d"。有了原生字符串,你不再用擔憂是否是漏寫了反斜槓,寫出來的表達式也更直觀。

僅需輕輕知道的幾個匹配模式

re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)

M(MULTILINE): 多行模式,改變 '^' '$' 的行爲(參見上圖)
S(DOTALL): 點任意匹配模式,改變 '.' 的行爲
 
--------logging----

不少程序都有記錄日誌的需求,而且日誌中包含的信息即有正常的程序訪問日誌,還可能有錯誤、警告等信息輸出,python的logging模塊提供了標準的日誌接口,你能夠經過它存儲各類格式的日誌,logging的日誌能夠分爲 debug()info()warning()error() and critical() 5個級別,下面咱們看一下怎麼用。

最簡單用法

import logging
 
#create logger
logger = logging.getLogger('TEST-LOG')
logger.setLevel(logging.DEBUG)
 
 
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
 
# create file handler and set level to warning
fh = logging.FileHandler("access.log")
fh.setLevel(logging.WARNING)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
 
# add formatter to ch and fh
ch.setFormatter(formatter)
fh.setFormatter(formatter)
 
# add ch and fh to logger
logger.addHandler(ch)
logger.addHandler(fh)
 
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
View Code

 

ConfigParser模塊

用於生成和修改常見配置文檔,當前模塊的名稱在 python 3.x 版本中變動爲 configparser。

來看一個好多軟件的常見文檔格式以下

  [DEFAULT]
ServerAliveInterval  =  45
Compression  =  yes
CompressionLevel  =  9
ForwardX11  =  yes
 
[bitbucket.org]
User  =  hg
 
[topsecret.server.com]
Port  =  50022
ForwardX11  =  no
 
若是想用python生成一個這樣的文檔怎麼作呢?
 
import  configparser
 
config  =  configparser.ConfigParser()
config[ "DEFAULT" =  { 'ServerAliveInterval' '45' ,
                       'Compression' 'yes' ,
                      'CompressionLevel' '9' }
 
config[ 'bitbucket.org' =  {}
config[ 'bitbucket.org' ][ 'User' =  'hg'
config[ 'topsecret.server.com' =  {}
topsecret  =  config[ 'topsecret.server.com' ]
topsecret[ 'Host Port' =  '50022'      # mutates the parser
topsecret[ 'ForwardX11' =  'no'   # same here
config[ 'DEFAULT' ][ 'ForwardX11' =  'yes'
with  open ( 'example.ini' 'w' ) as configfile:
    config.write(configfile)
 

寫完了還能夠再讀出來哈。

>>> import configparser

>>> config  =  configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read( 'example.ini' )
[ 'example.ini' ]
>>> config.sections()
[ 'bitbucket.org' 'topsecret.server.com' ]
>>>  'bitbucket.org'  in  config
True
>>>  'bytebong.com'  in  config
False
>>> config[ 'bitbucket.org' ][ 'User' ]
'hg'
>>> config[ 'DEFAULT' ][ 'Compression' ]
'yes'
>>> topsecret  =  config[ 'topsecret.server.com' ]
>>> topsecret[ 'ForwardX11' ]
'no'
>>> topsecret[ 'Port' ]
'50022'
>>>  for  key  in  config[ 'bitbucket.org' ]:  print (key)
...
user
compressionlevel
serveraliveinterval
compression
forwardx11
>>> config[ 'bitbucket.org' ][ 'ForwardX11' ]
'yes'
 
configparser增刪改查語法
[section1]
k1  =  v1
k2:v2
  
[section2]
k1  =  v1
 
import  ConfigParser
  
config  =  ConfigParser.ConfigParser()
config.read( 'i.cfg' )
  
# ########## 讀 ##########
#secs = config.sections()
#print secs
#options = config.options('group2')
#print options
  
#item_list = config.items('group2')
#print item_list
  
#val = config.get('group1','key')
#val = config.getint('group1','key')
  
# ########## 改寫 ##########
#sec = config.remove_section('group1')
#config.write(open('i.cfg', "w"))
  
#sec = config.has_section('wupeiqi')
#sec = config.add_section('wupeiqi')
#config.write(open('i.cfg', "w"))
  
  
#config.set('group2','k1',11111)
#config.write(open('i.cfg', "w"))
  
#config.remove_option('group2','age')
#config.write(open('i.cfg', "w"))

-----------------          hashlib模塊  -------------------

用於加密相關的操做,3.x裏代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

import hashlib
 
m = hashlib.md5()
m.update(b"Hello")
m.update(b"It's me")
print(m.digest())
m.update(b"It's been a long time since last time we ...")
 
print(m.digest()) #2進制格式hash
print(len(m.hexdigest())) #16進制格式hash
'''
def digest(self, *args, **kwargs): # real signature unknown
    """ Return the digest value as a string of binary data. """
    pass
 
def hexdigest(self, *args, **kwargs): # real signature unknown
    """ Return the digest value as a string of hexadecimal digits. """
    pass
 
'''
import hashlib
 
# ######## md5 ########
 
hash = hashlib.md5()
hash.update('admin')
print(hash.hexdigest())
 
# ######## sha1 ########
 
hash = hashlib.sha1()
hash.update('admin')
print(hash.hexdigest())
 
# ######## sha256 ########
 
hash = hashlib.sha256()
hash.update('admin')
print(hash.hexdigest())
 
 
# ######## sha384 ########
 
hash = hashlib.sha384()
hash.update('admin')
print(hash.hexdigest())
 
# ######## sha512 ########
 
hash = hashlib.sha512()
hash.update('admin')
print(hash.hexdigest())
相關文章
相關標籤/搜索