Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Python3 ³£ÓÃÄ£¿é
 
  6247  次浏览      30
 2018-5-25 
 
±à¼­ÍƼö:
±¾ÎÄÀ´Ô´ÓÚcnblogs £¬½éÉÜÁË time £¬datetime £¬random £¬os £¬sys £¬ shutil £¬json&pickle £¬logging Ä£¿éµÈ֪ʶ¡£

Ò»¡¢timeÓëdatetimeÄ£¿é

ÔÚPythonÖУ¬Í¨³£ÓÐÕ⼸ÖÖ·½Ê½À´±íʾʱ¼ä£º

ʱ¼ä´Á(timestamp)£ºÍ¨³£À´Ëµ£¬Ê±¼ä´Á±íʾµÄÊÇ´Ó1970Äê1ÔÂ1ÈÕ00:00:00¿ªÊ¼°´Ãë¼ÆËãµÄÆ«ÒÆÁ¿¡£ÎÒÃÇÔËÐС°type(time.time())¡±£¬·µ»ØµÄÊÇfloatÀàÐÍ¡£

¸ñʽ»¯µÄʱ¼ä×Ö·û´®(Format String)

½á¹¹»¯µÄʱ¼ä(struct_time)£ºstruct_timeÔª×é¹²ÓÐ9¸öÔªËØ¹²¾Å¸öÔªËØ:(Ä꣬Ô£¬ÈÕ£¬Ê±£¬·Ö£¬Ã룬һÄêÖеڼ¸ÖÜ£¬Ò»ÄêÖеڼ¸Ì죬ÏÄÁîʱ)

import time
#--------------------------ÎÒÃÇÏÈÒÔµ±Ç°Ê±¼äΪ׼,Èôó¼Ò¿ìËÙÈÏʶÈýÖÖÐÎʽµÄʱ¼ä
print (time.time()) # ʱ¼ä´Á :1487130156.419527
print (time.strftime("%Y-%m-%d %X")) # ¸ñʽ»¯µÄʱ¼ä×Ö·û´® :'2017-02-15 11:40:53'

print (time.localtime()) #±¾µØÊ±ÇøµÄ struct_time
print (time.gmtime()) #UTCÊ±ÇøµÄ struct_time


%a Locale¡¯s abbreviated weekday name.
%A Locale¡¯s full weekday name.
%b Locale¡¯s abbreviated month name.
%B Locale¡¯s full month name.
%c Locale¡¯s appropriate date and time representation.
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%I Hour (12-hour clock) as a decimal number [01,12].
%j Day of the year as a decimal number [001,366].
%m Month as a decimal number [01,12].
%M Minute as a decimal number [00,59].
%p Locale¡¯s equivalent of either AM or PM. (1)
%S Second as a decimal number [00,61]. (2)
%U Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0. (3)
%w Weekday as a decimal number [0 (Sunday),6].
%W Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0. (3)
%x Locale¡¯s appropriate date representation.
%X Locale¡¯s appropriate time representation.
%y Year without century as a decimal number 00 ,99 ].
%Y Year with century as a decimal number.
%z Time zone offset indicating a positive or negative time difference from UTC /GMT of the form + HHMM or - HHMM, where H represents decimal hour digits and M represents decimal minute digits [ - 23:59, + 23:59 ].
%Z Time zone name (no characters if no time zone exists) .
%% A literal '%' character.
¸ñʽ»¯×Ö·û´®µÄʱ¼ä¸ñʽ

ÆäÖмÆËã»úÈÏʶµÄʱ¼äÖ»ÄÜÊÇ'ʱ¼ä´Á'¸ñʽ£¬¶ø³ÌÐòÔ±¿É´¦ÀíµÄ»òÕß˵ÈËÀàÄÜ¿´¶®µÄʱ¼äÓÐ: '¸ñʽ»¯µÄʱ¼ä×Ö·û´®'£¬'½á¹¹»¯µÄʱ¼ä' £¬ÓÚÊÇÓÐÁËÏÂͼµÄת»»¹ØÏµ

#--------------------------°´Í¼1ת»»Ê±¼ä
# localtime ([secs])
# ½«Ò»¸öʱ¼ä´Áת»»Îªµ±Ç°Ê±ÇøµÄ struct_time¡£secs ²ÎÊýδÌṩ £¬ÔòÒÔµ±Ç°Ê±¼äΪ׼¡£
time.localtime ()
time.localtime (1473525444.037215)
# gmtime ([secs]) ºÍlocaltime()·½·¨ÀàËÆ£¬gmtime () ·½·¨Êǽ«Ò»¸öʱ¼ä´Áת»»ÎªUTCÊ±Çø£¨0Ê±Çø£©µÄstruct _ time¡£
# mktime(t) : ½«Ò»¸ö struct_time ת»¯ÎªÊ±¼ä´Á¡£
print (time.mktime (time.localtime ()) ) # 1473525749 .0
# strftime (format[, t]) : °ÑÒ»¸ö´ú±íʱ¼äµÄÔª×é»òÕßstruct_time£¨ÈçÓÉtime.localtime ()ºÍ # time. gmtime () ·µ»Ø £©×ª»¯Îª¸ñʽ»¯µÄʱ¼ä×Ö·û´®¡£Èç¹ûtδָ¶¨£¬½«´«Èëtime.localtime ()¡£Èç¹ûÔª×éÖÐÈκÎÒ»¸ö
# ÔªËØÔ½½ç£¬ValueError µÄ´íÎ󽫻ᱻÅ׳ö¡£
print(time.strftime ("%Y-%m-%d %X", time. localtime ( )))#2016-09-11 00:49:56
# time. strptime (string[, format])
# °ÑÒ»¸ö¸ñʽ»¯Ê±¼ä×Ö·û´®×ª»¯Îª struct_time ¡£Êµ¼ÊÉÏËüºÍstrftime ()ÊÇÄæ²Ù×÷¡£
print (time.strptime ('2011-05-05 16:37:06', '%Y-%m - %d %X'))
#time.struct_time (tm_year=2011, tm_mon = 5, tm_mday = 5, tm_hour = 16, tm_min = 37, tm_sec = 6,
# tm_wday = 3, tm_yday = 125, tm_isdst = -1)
#ÔÚÕâ¸öº¯ÊýÖУ¬format ĬÈÏΪ£º"%a %b %d %H:%M:%S %Y" ¡£

#--------------------------°´Í¼2ת»»Ê±¼ä
# asctime([t]) : °ÑÒ»¸ö±íʾʱ¼äµÄÔª×é»òÕßstruct_ time ±íʾΪÕâÖÖÐÎʽ£º'Sun Jun 20 23:21:05 1993 '¡£
# Èç¹ûûÓвÎÊý£¬½«»á½«time.localtime ()×÷Ϊ²ÎÊý´«Èë¡£
print (time.asctime() ) #Sun Sep 11 00:43:43 2016

# ctime ([secs]) : °ÑÒ»¸öʱ¼ä´Á£¨°´Ãë¼ÆËãµÄ¸¡µãÊý£©×ª»¯Îªtime.asctime()µÄÐÎʽ¡£Èç¹û²ÎÊýδ¸ø»òÕßΪ
# NoneµÄʱºò£¬½«»áĬÈÏ time.time ()Ϊ²ÎÊý¡£ËüµÄ×÷ÓÃÏ൱ÓÚtime.asctime (time.localtime(secs))¡£
print (time.ctime()) # Sun Sep 11 00:46:38 2016
print (time.ctime(time.time())) # Sun Sep 11 00:46:38 2016


1 #--------------------------ÆäËûÓ÷¨
2 # sleep(secs)
3 # Ïß³ÌÍÆ³ÙÖ¸¶¨µÄʱ¼äÔËÐУ¬µ¥Î»ÎªÃë¡£

datetimeÄ£¿é

#ʱ¼ä¼Ó¼õ
import datetime
# print (datetime.datetime.now()) #·µ»Ø 2016-08-19 12 : 47 : 03.941925
#print (datetime.date.fromtimestamp (time .time () ) ) # ʱ¼ä´ÁÖ±½Óת³ÉÈÕÆÚ¸ñʽ 2016-08-19
# print (datetime.datetime.now() )
# print (datetime.datetime.now() + datetime.timedelta (3)) #µ±Ç°Ê±¼ä+3Ìì
# print (datetime.datetime.now() + datetime.timedelta (-3)) #µ±Ç°Ê±¼ä-3Ìì
# print (datetime.datetime.now() + datetime.timedelta (hours=3)) #µ±Ç°Ê±¼ä+3Сʱ
# print (datetime.datetime.now() + datetime.timedelta (minutes=30)) #µ±Ç°Ê±¼ä+30·Ö
#
# c_time = datetime.datetime.now ()
# print (c_time.replace (minute=3,hour=2)) #ʱ¼äÌæ»»

¶þ¡¢randomÄ£¿é

import random
print (random.random())#(0,1)----float ´óÓÚ0ÇÒСÓÚ1Ö®¼äµÄСÊý
print (random.randint(1,3)) #[1,3] ´óÓÚµÈÓÚ1ÇÒСÓÚµÈÓÚ3Ö®¼äµÄÕûÊý
print (random.randrange(1,3)) #[1,3) ´óÓÚµÈÓÚ1ÇÒСÓÚ3Ö®¼äµÄÕûÊý
print (random.choice([1,'23',[4,5]]))#1»òÕß23»òÕß[4,5]
print (random.sample([1,'23',[4,5]],2))#ÁбíÔªËØÈÎÒâ2¸ö×éºÏ
print (random.uniform(1,3))#´óÓÚ1СÓÚ3µÄСÊý£¬Èç1.927109612082716
item = [1,3,5,7,9]
random.shuffle (item) #´òÂÒitemµÄ˳Ðò,Ï൱ÓÚ"Ï´ÅÆ"
print (item)

import random
def make_code (n):
res=''
for i in range(n):
s1 = chr (random.randint(65,90))
s2 = str (random.randint(0,9))
res += random.choice([s1,s2])
return res
print (make_code(9))
Éú³ÉËæ»úÑéÖ¤Âë

Èý¡¢osÄ£¿é

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 Êä³öÓÃÓÚ·Ö¸îÎļþ·¾¶µÄ×Ö·û´® winÏÂΪ; , Linux ÏÂΪ:
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ËùÖ¸ÏòµÄÎļþ»òÕßĿ¼µÄ×îºóÐÞ¸Äʱ¼ä
os.path.getsize (path) ·µ»ØpathµÄ´óС

ÔÚLinuxºÍMacƽ̨ÉÏ£¬¸Ãº¯Êý»áÔ­Ñù·µ»Ø path£¬ÔÚwindows ƽ̨ÉϻὫ·¾¶ÖÐËùÓÐ×Ö·ûת»»ÎªÐ¡Ð´£¬²¢½«ËùÓÐб¸Üת»»Îª·¹Ð±¸Ü¡£
>>> os.path.normcase ('c:/windows\\system32\\')
'c : \\ windows\\system32\\'
¹æ·¶»¯Â·¾¶£¬Èç..ºÍ/
>>> os.path.normpath ('c://windows \\System32 \\../ Temp /')
'c:\\windows\\Temp'
>>> a= '/Users/jieli /test1/\\\a1/\\\\aa.py/../..'
>>> print (os.path.normpath(a))
/Users /jieli/test1

os·¾¶´¦Àí
#·½Ê½Ò»£ºÍƼöʹÓÃ
import os
#¾ßÌåÓ¦ÓÃ
import os,sys
possible_topdir = os.path.normpath(os.path.join(
os.path.abspath (__file__),
os.pardir, #ÉÏÒ»¼¶
os.pardir,
os.pardir
))
sys.path.insert (0,possible_topdir)
#·½Ê½¶þ£º²»ÍƼöʹÓÃ
os.path.dirname (os.path.dirname (os .path. dirname (os.path. abspath (__file__) )))

ËÄ¡¢sysÄ£¿é

sys.argv ÃüÁîÐвÎÊýList£¬µÚÒ»¸öÔªËØÊdzÌÐò±¾Éí·¾¶
sys.exit (n) Í˳ö³ÌÐò£¬Õý³£Í˳öʱexit(0)
sys.version »ñÈ¡ Python ½âÊͳÌÐòµÄ°æ±¾ÐÅÏ¢
sys.maxint ×î´óµÄ Int Öµ
sys.path ·µ»ØÄ£¿éµÄËÑË÷·¾¶£¬³õʼ»¯Ê±Ê¹ÓÃPYTHONPATH »·¾³±äÁ¿µÄÖµ
sys.platform ·µ»Ø²Ù×÷ϵͳƽ̨Ãû³Æ

´òÓ¡½ø¶ÈÌõ

#=========֪ʶ´¢±¸==========
#½ø¶ÈÌõµÄЧ¹û
[# ]
[## ]
[### ]
[#### ]
#Ö¸¶¨¿í¶È
print ('[%-15s]' %'#')
print ('[%-15s]' %'##')
print ('[%-15s]' %'###')
print ('[%-15s]' %'####')
#´òÓ¡%
print ('%s%%' %(100)) #µÚ¶þ¸ö%ºÅ´ú±íÈ¡ÏûµÚÒ»¸ö%µÄÌØÊâÒâÒå
#¿É´«²ÎÀ´¿ØÖÆ¿í¶È
print ('[%%-%ds]' %50) #[%-50s]
print (('[%%-%ds]' %50) %'#')
print (('[%%-%ds]' %50) %'##')
print (('[%%-%ds]' %50) %'###')
#=========ʵÏÖ´òÓ¡½ø¶ÈÌõº¯Êý==========
import sys
import time
def progress (percent,width=50):
if percent >= 1:
percent = 1
show_str = ('[%%-%ds]' %width) % (int(width*percent)*'#')
print ('\r%s %d%%' %(show_str,int (100*percent) ),file = sys . stdout ,flush = True,end='')
#=========Ó¦ÓÃ==========
data_size= 1025
recv_size= 0
while recv_size < data_size:
time.sleep (0.1) #Ä£ÄâÊý¾ÝµÄ´«ÊäÑÓ³Ù
recv_size+= 1024 #ÿ´ÎÊÕ1024
percent = recv_size/data_size #½ÓÊյıÈÀý
progress (percent,width=70) #½ø¶ÈÌõµÄ¿í¶È70
ÓÅ»¯°æ±¾£º
def progress (percent,width=50):
if percent > 1:
percent = 1
show_str = ('[%%-%ds]' %width) % (int(width*percent) * '#')
print( '\r%s %d%%' % (show_str,int(100*percent)),end='')
import time
recv_size = 0
total_size = 100
while recv_size < total_size:
time.sleep (0.1)
recv_size += 1
percent = recv_size / total_size
progress (percent)

Îå¡¢shutilÄ£¿é

¸ß¼¶µÄ Îļþ¡¢Îļþ¼Ð¡¢Ñ¹Ëõ°ü ´¦ÀíÄ£¿é

shutil.copyfileobj(fsrc, fdst[, length])

½«ÎļþÄÚÈÝ¿½±´µ½ÁíÒ»¸öÎļþÖÐ

import shutil
shutil.copyfileobj (open('old.xml','r'), open ('new . xml', 'w'))

shutil.copyfile(src, dst)

¿½±´Îļþ

shutil.copyfile ('f1.log', 'f2.log') #Ä¿±êÎļþÎÞÐè´æÔÚ

shutil.copymode(src, dst)

½ö¿½±´È¨ÏÞ¡£ÄÚÈÝ¡¢×é¡¢Óû§¾ù²»±ä

Hello World!shutil.copymode ('f1.log', 'f2.log') #Ä¿±êÎļþ±ØÐë´æÔÚ

shutil.copystat(src, dst)

½ö¿½±´×´Ì¬µÄÐÅÏ¢£¬°üÀ¨£ºmode bits, atime, mtime, flags

shutil.copystat ('f1.log', 'f2.log') #Ä¿±êÎļþ±ØÐë´æÔÚ

shutil.copy(src, dst)

¿½±´ÎļþºÍȨÏÞ

import shutil
shutil.copy ('f1.log', 'f2.log')

shutil.copy2(src, dst)

¿½±´ÎļþºÍ״̬ÐÅÏ¢

import shutil
shutil.copy2('f1.log', 'f2.log')

shutil.ignore_patterns(*patterns)

shutil.copytree(src, dst, symlinks=False, ignore=None)

µÝ¹éµÄÈ¥¿½±´Îļþ¼Ð

import shutil
shutil.copytree ('folder1', 'folder2', ignore = shutil .ignore _ patterns ('*.pyc', 'tmp*')) #Ä¿±êĿ¼²»ÄÜ´æÔÚ£¬×¢Òâ¶Ô folder2Ŀ¼¸¸¼¶Ä¿Â¼ÒªÓпÉдȨÏÞ£¬ignore µÄÒâ˼ÊÇÅųý

import shutil
shutil.copytree ('f1', 'f2', symlinks=True, ignore = shutil.ignore_patterns('*.pyc', 'tmp*' ) )
'''
ͨ³£µÄ¿½±´¶¼°ÑÈíÁ¬½Ó¿½±´³ÉÓ²Á´½Ó£¬¼´¶Ô´ýÈíÁ¬½ÓÀ´Ëµ£¬´´½¨ÐµÄÎļþ
'''
¿½±´ÈíÁ´½Ó

shutil.rmtree(path[, ignore_errors[, onerror]])

µÝ¹éµÄȥɾ³ýÎļþ

import shutil
shutil.rmtree('folder1')

shutil.move(src, dst)

µÝ¹éµÄÈ¥ÒÆ¶¯Îļþ£¬ËüÀàËÆmvÃüÁÆäʵ¾ÍÊÇÖØÃüÃû¡£

import shutil
shutil.move('folder1', 'folder3')

shutil.make_archive(base_name, format,...)

´´½¨Ñ¹Ëõ°ü²¢·µ»ØÎļþ·¾¶£¬ÀýÈ磺zip¡¢tar

´´½¨Ñ¹Ëõ°ü²¢·µ»ØÎļþ·¾¶£¬ÀýÈ磺zip¡¢tar

base_name£º ѹËõ°üµÄÎļþÃû£¬Ò²¿ÉÒÔÊÇѹËõ°üµÄ·¾¶¡£Ö»ÊÇÎļþÃûʱ£¬Ôò±£´æÖÁµ±Ç°Ä¿Â¼£¬·ñÔò±£´æÖÁÖ¸¶¨Â·¾¶£¬

Èç data_bak =>±£´æÖÁµ±Ç°Â·¾¶

È磺/tmp/data_bak =>±£´æÖÁ/tmp/

format£º ѹËõ°üÖÖÀ࣬¡°zip¡±, ¡°tar¡±, ¡°bztar¡±£¬¡°gztar¡±

root_dir£º ҪѹËõµÄÎļþ¼Ð·¾¶£¨Ä¬Èϵ±Ç°Ä¿Â¼£©

owner£º Óû§£¬Ä¬Èϵ±Ç°Óû§

group£º ×飬ĬÈϵ±Ç°×é

logger£º ÓÃÓڼǼÈÕÖ¾£¬Í¨³£ÊÇlogging.Logger¶ÔÏó

#½« /data ϵÄÎļþ´ò°ü·ÅÖõ±Ç°³ÌÐòĿ¼
import shutil
ret = shutil.make_archive ("data_bak", 'gztar', root _ dir= '/data')
#½« /dataϵÄÎļþ´ò°ü·ÅÖà /tmp/Ŀ¼
import shutil
ret = shutil.make_archive ("/tmp/data_bak", 'gztar', root_ dir= '/data')

shutil ¶ÔѹËõ°üµÄ´¦ÀíÊǵ÷Óà ZipFile ºÍ TarFile Á½¸öÄ£¿éÀ´½øÐеģ¬Ïêϸ£º

import zipfile
# ѹËõ
z = zipfile.ZipFile ('laxi.zip', 'w')
z.write ('a.log')
z.write ('data.data')
z.close()
# ½âѹ
z = zipfile.ZipFile ('laxi.zip', 'r')
z.extractall (path='.')
z.close()
zipfileѹËõ½âѹËõ

import tarfile
# ѹËõ
>>> t=tarfile.open ('/tmp/egon.tar','w')
>>> t.add ('/test1/a.py',arcname='a.bak')
>>> t.add ('/test1/b.py',arcname='b.bak')
>>> t.close ()
# ½âѹ
>>> t=tarfile.open ('/tmp/egon.tar','r')
>>> t.extractall ('/egon')
>>> t.close ()
tarfile ѹËõ½âѹËõ

Áù¡¢json&pickleÄ£¿é

֮ǰÎÒÃÇѧϰ¹ýÓÃevalÄÚÖ÷½·¨¿ÉÒÔ½«Ò»¸ö×Ö·û´®×ª³Épython¶ÔÏ󣬲»¹ý£¬eval·½·¨ÊÇÓоÖÏÞÐԵ쬶ÔÓÚÆÕͨµÄÊý¾ÝÀàÐÍ£¬json.loadsºÍeval¶¼ÄÜÓ㬵«Óöµ½ÌØÊâÀàÐ͵Äʱºò£¬eval¾Í²»¹ÜÓÃÁË,ËùÒÔevalµÄÖØµã»¹ÊÇͨ³£ÓÃÀ´Ö´ÐÐÒ»¸ö×Ö·û´®±í´ïʽ£¬²¢·µ»Ø±í´ïʽµÄÖµ¡£

import json
x= "[null,true,false,1]"
print (eval(x)) #±¨´í£¬ÎÞ·¨½âÎönullÀàÐÍ£¬¶øjson ¾Í¿ÉÒÔ
print (json.loads(x))

ʲôÊÇÐòÁл¯£¿

ÎÒÃǰѶÔÏó(±äÁ¿)´ÓÄÚ´æÖбä³É¿É´æ´¢»ò´«ÊäµÄ¹ý³Ì³ÆÖ®ÎªÐòÁл¯£¬ÔÚPythonÖнÐpickling£¬ÔÚÆäËûÓïÑÔÖÐÒ²±»³ÆÖ®Îªserialization£¬marshalling£¬flatteningµÈµÈ£¬¶¼ÊÇÒ»¸öÒâ˼¡£

ΪʲôҪÐòÁл¯£¿

1£º³Ö¾Ã±£´æ×´Ì¬

ÐèÖªÒ»¸öÈí¼þ/³ÌÐòµÄÖ´ÐоÍÔÚ´¦ÀíһϵÁÐ״̬µÄ±ä»¯£¬ÔÚ±à³ÌÓïÑÔÖУ¬'״̬'»áÒÔ¸÷ÖÖ¸÷ÑùÓнṹµÄÊý¾ÝÀàÐÍ(Ò²¿É¼òµ¥µÄÀí½âΪ±äÁ¿)µÄÐÎʽ±»±£´æÔÚÄÚ´æÖС£

ÄÚ´æÊÇÎÞ·¨ÓÀ¾Ã±£´æÊý¾ÝµÄ£¬µ±³ÌÐòÔËÐÐÁËÒ»¶Îʱ¼ä£¬ÎÒÃǶϵç»òÕßÖØÆô³ÌÐò£¬ÄÚ´æÖйØÓÚÕâ¸ö³ÌÐòµÄ֮ǰһ¶Îʱ¼äµÄÊý¾Ý£¨Óнṹ£©¶¼±»Çå¿ÕÁË¡£

Ôڶϵç»òÖØÆô³ÌÐò֮ǰ½«³ÌÐòµ±Ç°ÄÚ´æÖÐËùÓеÄÊý¾Ý¶¼±£´æÏÂÀ´£¨±£´æµ½ÎļþÖУ©£¬ÒÔ±ãÓÚÏ´γÌÐòÖ´ÐÐÄܹ»´ÓÎļþÖÐÔØÈë֮ǰµÄÊý¾Ý£¬È»ºó¼ÌÐøÖ´ÐУ¬Õâ¾ÍÊÇÐòÁл¯¡£

¾ßÌåµÄÀ´Ëµ£¬ÄãÍæÊ¹ÃüÕÙ»½´³µ½Á˵Ú13¹Ø£¬Äã±£´æÓÎϷ״̬£¬¹Ø»ú×ßÈË£¬Ï´ÎÔÙÍæ£¬»¹ÄÜ´ÓÉϴεÄλÖÿªÊ¼¼ÌÐø´³¹Ø¡£»òÈ磬ÐéÄâ»ú״̬µÄ¹ÒÆðµÈ¡£

2£º¿çƽ̨Êý¾Ý½»»¥

ÐòÁл¯Ö®ºó£¬²»½ö¿ÉÒÔ°ÑÐòÁл¯ºóµÄÄÚÈÝдÈë´ÅÅÌ£¬»¹¿ÉÒÔͨ¹ýÍøÂç´«Êäµ½±ðµÄ»úÆ÷ÉÏ£¬Èç¹ûÊÕ·¢µÄË«·½Ô¼¶¨ºÃʵÓÃÒ»ÖÖÐòÁл¯µÄ¸ñʽ£¬ÄÇô±ã´òÆÆÁËÆ½Ì¨/ÓïÑÔ²îÒ컯´øÀ´µÄÏÞÖÆ£¬ÊµÏÖÁË¿çÆ½Ì¨Êý¾Ý½»»¥¡£

·´¹ýÀ´£¬°Ñ±äÁ¿ÄÚÈÝ´ÓÐòÁл¯µÄ¶ÔÏóÖØÐ¶Áµ½ÄÚ´æÀï³ÆÖ®Îª·´ÐòÁл¯£¬¼´unpickling¡£

ÈçºÎÐòÁл¯Ö®jsonºÍpickle:

json

Èç¹ûÎÒÃÇÒªÔÚ²»Í¬µÄ±à³ÌÓïÑÔÖ®¼ä´«µÝ¶ÔÏ󣬾ͱØÐë°Ñ¶ÔÏóÐòÁл¯Îª±ê×¼¸ñʽ£¬±ÈÈçXML£¬µ«¸üºÃµÄ·½·¨ÊÇÐòÁл¯ÎªJSON£¬ÒòΪJSON±íʾ³öÀ´¾ÍÊÇÒ»¸ö×Ö·û´®£¬¿ÉÒÔ±»ËùÓÐÓïÑÔ¶ÁÈ¡£¬Ò²¿ÉÒÔ·½±ãµØ´æ´¢µ½´ÅÅÌ»òÕßͨ¹ýÍøÂç´«Êä¡£JSON²»½öÊDZê×¼¸ñʽ£¬²¢ÇÒ±ÈXML¸ü¿ì£¬¶øÇÒ¿ÉÒÔÖ±½ÓÔÚWebÒ³ÃæÖжÁÈ¡£¬·Ç³£·½±ã¡£

JSON±íʾµÄ¶ÔÏó¾ÍÊDZê×¼µÄJavaScriptÓïÑԵĶÔÏó£¬JSONºÍPythonÄÚÖõÄÊý¾ÝÀàÐͶÔÓ¦ÈçÏ£º

JsonÄ£¿éÌṩÁËËĸö¹¦ÄÜ£ºdumps¡¢dump¡¢loads¡¢load

import json
dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = json.dumps(dic) #ÐòÁл¯£º½«Ò»¸ö×Öµäת»»³ÉÒ»¸ö×Ö·û´®
print (type(str_dic),str_dic) #<class 'str'> {"k3" : "v3", "k1": "v1", "k2": "v2" }
#×¢Ò⣬ json ת»»ÍêµÄ×Ö·û´®ÀàÐ͵Ä×ÖµäÖеÄ×Ö·û´®ÊÇÓÉ""±íʾµÄ
dic2 = json.loads (str_dic) #·´ÐòÁл¯£º½«Ò»¸ö×Ö·û´®¸ñʽµÄ×Öµäת»»³ÉÒ»¸ö×Öµä
#×¢Ò⣬ҪÓà json µÄloads¹¦ÄÜ´¦ÀíµÄ×Ö·û´®ÀàÐ͵Ä×ÖµäÖеÄ×Ö·û´®±ØÐëÓÉ""±íʾ
print (type(dic2) ,dic2) # <class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
list_dic = [1, ['a','b','c'], 3, {'k1': 'v1','k2' :'v2'} ]
str_dic = json.dumps (list_dic) #Ò²¿ÉÒÔ´¦ÀíǶÌ×µÄÊý¾ÝÀàÐÍ
print (type(str_dic),str_dic) # <class 'str'> [1, ["a", "b", "c"] , 3, {"k1": "v1", "k2": "v2"}]
list_dic2 = json.loads (str_dic)
print (type (list_dic2),list_dic2) # <class 'list '> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2' }]
loads ºÍ dumps

import json
f = open ('json_file','w')
dic = {'k1':'v1','k2':'v2','k3':'v3'}
json.dump (dic,f) #dump·½·¨½ÓÊÕÒ»¸öÎļþ¾ä±ú£¬Ö±½Ó½«×Öµäת»»³É json ×Ö·û´®Ð´ÈëÎļþ
f.close ()
f = open ('json_file')
dic2 = json.load (f) #load ·½·¨½ÓÊÕÒ»¸öÎļþ¾ä±ú£¬Ö±½Ó½«ÎļþÖеÄjson×Ö·û´®×ª»»³ÉÊý¾Ý½á¹¹·µ»Ø
f.close ()
print (type(dic2),dic2)
load ºÍ dump

import json
#dct= "{'1':111}"#json ²»Èϵ¥ÒýºÅ
#dct=str ({"1":111}) #±¨´í,ÒòΪÉú³ÉµÄÊý¾Ý»¹Êǵ¥ÒýºÅ:{'one': 1}
dct ='{"1":"111"}'
print (json.loads(dct))
#conclusion:
# ÎÞÂÛÊý¾ÝÊÇÔõÑù´´½¨µÄ£¬Ö»ÒªÂú×ãjson¸ñʽ£¬¾Í¿ÉÒÔjson.loads³öÀ´,²»Ò»¶¨·ÇÒª dumpsµÄÊý¾Ý²ÅÄÜ loads
×¢Òâµã

pickle

import pickle
dic = {'name':'alvin','age':23,'sex':'male'}
print (type(dic))#<class 'dict'>
j= pickle.dumps (dic)
print(type(j)) #<class 'bytes'>
f=open ('ÐòÁл¯¶ÔÏó_pickle','wb')#×¢ÒâÊÇwÊÇдÈëstr,wb ÊÇдÈë bytes,jÊÇ 'bytes'
f.write (j) #-------------------µÈ¼ÛÓÚpickle.dump (dic ,f)
f.close ()
#-------------------------·´ÐòÁл¯
import pickle
f=open ('ÐòÁл¯¶ÔÏó_pickle','rb')
data = pickle.loads (f.read())# µÈ¼ÛÓÚdata = pickle .load (f)
print ( data['age'] )

PickleµÄÎÊÌâºÍËùÓÐÆäËû±à³ÌÓïÑÔÌØÓеÄÐòÁл¯ÎÊÌâÒ»Ñù£¬¾ÍÊÇËüÖ»ÄÜÓÃÓÚPython£¬²¢ÇÒ¿ÉÄܲ»Í¬°æ±¾µÄPython±Ë´Ë¶¼²»¼æÈÝ£¬Òò´Ë£¬Ö»ÄÜÓÃPickle±£´æÄÇЩ²»ÖØÒªµÄÊý¾Ý£¬²»Äܳɹ¦µØ·´ÐòÁл¯Ò²Ã»¹ØÏµ¡£

Æß¡¢loggingÄ£¿é

ÈÕÖ¾¼¶±ð

CRITICAL = 50 #FATAL = CRITICAL
ERROR = 40
WARNING = 30 #WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0 #²»ÉèÖÃ

ĬÈϼ¶±ðΪwarning,ĬÈÏ´òÓ¡µ½ÖÕ¶Ë

import logging
logging.debug ('µ÷ÊÔdebug')
logging.info ('ÏûÏ¢info')
logging.warning ('¾¯¸æwarn')
logging.error ('´íÎóerror')
logging.critical ('ÑÏÖØcritical')
'''
WARNING:root: ¾¯¸æ warn
ERROR:root :´íÎó error
CRITICAL:root: ÑÏÖØ critical
'''

ΪloggingÄ£¿éÖ¸¶¨È«¾ÖÅäÖã¬Õë¶ÔËùÓÐloggerÓÐЧ£¬¿ØÖÆ´òÓ¡µ½ÎļþÖÐ

¿ÉÔÚ logging.basicConfig ( ) º¯ÊýÖÐͨ¹ý¾ßÌå²ÎÊýÀ´¸ü¸Ä logging Ä£¿éĬÈÏÐÐΪ£¬¿ÉÓòÎÊýÓÐ
filename £ºÓÃÖ¸¶¨µÄÎļþÃû´´½¨ FiledHandler£¨ºó±ß»á¾ßÌå½²½â handler µÄ¸ÅÄ£¬ÕâÑùÈÕÖ¾»á±»´æ´¢ÔÚÖ¸¶¨µÄÎļþÖС£
filemode£ºÎļþ´ò¿ª·½Ê½£¬ÔÚÖ¸¶¨ÁË filename ʱʹÓÃÕâ¸ö²ÎÊý£¬Ä¬ÈÏֵΪ¡°a¡±»¹¿ÉÖ¸¶¨Îª¡°w¡±¡£
format£ºÖ¸¶¨ handler ʹÓõÄÈÕÖ¾ÏÔʾ¸ñʽ¡£
datefmt£ºÖ¸¶¨ÈÕÆÚʱ¼ä¸ñʽ¡£
level£ºÉèÖà rootlogger£¨ºó±ß»á½²½â¾ßÌå¸ÅÄµÄÈÕÖ¾¼¶±ð
stream£ºÓÃÖ¸¶¨µÄ stream ´´½¨ StreamHandler ¡£¿ÉÒÔÖ¸¶¨Êä³öµ½ sys.stderr,sys.stdout »òÕßÎļþ£¬Ä¬ÈÏΪsys.stderr¡£ÈôͬʱÁгöÁË filename ºÍ stream Á½¸ö²ÎÊý£¬Ôò stream ²ÎÊý»á±»ºöÂÔ¡£
#¸ñʽ
%(name)s£ºLogger µÄÃû×Ö£¬²¢·ÇÓû§Ãû£¬Ïêϸ²é¿´
%(levelno)s£ºÊý×ÖÐÎʽµÄÈÕÖ¾¼¶±ð
%(levelname)s£ºÎı¾ÐÎʽµÄÈÕÖ¾¼¶±ð
%(pathname)s£ºµ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÄ£¿éµÄÍêÕû·¾¶Ãû£¬¿ÉÄÜûÓÐ
%(filename)s£ºµ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÄ£¿éµÄÎļþÃû
%(module)s£ºµ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÄ£¿éÃû
%(funcName)s£ºµ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄº¯ÊýÃû
%(lineno)d£ºµ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÓï¾äËùÔڵĴúÂëÐÐ
%(created)f£ºµ±Ç°Ê±¼ä£¬ÓÃUNIX±ê×¼µÄ±íʾʱ¼äµÄ¸¡ µãÊý±íʾ
%(relativeCreated) d£ºÊä³öÈÕÖ¾ÐÅϢʱµÄ£¬×ÔLogger´´½¨ÒÔ À´µÄºÁÃëÊý
%(asctime)s£º×Ö·û´®ÐÎʽµÄµ±Ç°Ê±¼ä¡£Ä¬ÈϸñʽÊÇ ¡°2003-07-08 16:49:45,896¡±¡£¶ººÅºóÃæµÄÊǺÁÃë
%(thread)d£ºÏß³ÌID¡£¿ÉÄÜûÓÐ
%(threadName)s£ºÏß³ÌÃû¡£¿ÉÄÜûÓÐ
%(process)d£º½ø³ÌID¡£¿ÉÄÜûÓÐ
%(message)s£ºÓû§Êä³öµÄÏûÏ¢
format²ÎÊýÖпÉÄÜÓõ½µÄ¸ñʽ»¯´®£º
%(name)s LoggerµÄÃû×Ö
%(levelno)s Êý×ÖÐÎʽµÄÈÕÖ¾¼¶±ð
%(levelname)s Îı¾ÐÎʽµÄÈÕÖ¾¼¶±ð
%(pathname)s µ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÄ£¿éµÄÍêÕû·¾¶Ãû£¬¿ÉÄÜûÓÐ
%(filename)s µ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÄ£¿éµÄÎļþÃû
%(module)s µ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÄ£¿éÃû
%(funcName)s µ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄº¯ÊýÃû
%(lineno)d µ÷ÓÃÈÕÖ¾Êä³öº¯ÊýµÄÓï¾äËùÔڵĴúÂëÐÐ
%(created)f µ±Ç°Ê±¼ä£¬ÓÃUNIX±ê×¼µÄ±íʾʱ¼äµÄ¸¡ µãÊý±íʾ
%(relativeCreated)d Êä³öÈÕÖ¾ÐÅϢʱµÄ£¬×ÔLogger´´½¨ÒÔ À´µÄºÁÃëÊý
%(asctime)s ×Ö·û´®ÐÎʽµÄµ±Ç°Ê±¼ä¡£Ä¬ÈϸñʽÊÇ ¡°2003-07-08 16:49:45,896¡±¡£¶ººÅºóÃæµÄÊǺÁÃë
%(thread)d Ïß³ÌID¡£¿ÉÄÜûÓÐ
%(threadName)s Ïß³ÌÃû¡£¿ÉÄÜûÓÐ
%(process)d ½ø³ÌID¡£¿ÉÄÜûÓÐ
%(message)sÓû§Êä³öµÄÏûÏ¢
#========ʹÓÃ
import logging
logging.basicConfig (filename='access.log',
format = '% (asctime)s - %(name)s - %(levelname)s -% (module)s: %(message)s',
datefmt = '%Y-%m-%d %H:%M:%S %p',
level = 10)
logging.debug ('µ÷ÊÔdebug')
logging.info ('ÏûÏ¢info')
logging.warning ('¾¯¸æwarn')
logging.error ('´íÎóerror')
logging.critical ('ÑÏÖØcritical')
#========½á¹û
access.logÄÚÈÝ:
2017-07-28 20:32:17 PM - root - DEBUG -test: µ÷ÊÔdebug
2017-07-28 20:32:17 PM - root - INFO -test: ÏûÏ¢info
2017-07-28 20:32:17 PM - root - WARNING -test: ¾¯¸æwarn
2017-07-28 20:32:17 PM - root - ERROR -test: ´íÎóerror
2017-07-28 20:32:17 PM - root - CRITICAL -test: ÑÏÖØcritical
part2: ¿ÉÒÔΪlogging Ä£¿éÖ¸¶¨Ä£¿é¼¶µÄÅäÖÃ,¼´ËùÓÐloggerµÄÅäÖÃ

loggingÄ£¿éµÄFormatter,Handler£¬Logger£¬Filter¶ÔÏó

Ô­Àíͼ£º

logger£º²úÉúÈÕÖ¾µÄ¶ÔÏó
Filter:¹ýÂËÈÕÖ¾µÄ¶ÔÏó
Handler:½ÓÊÕÈÕ־Ȼºó¿ØÖÆ´òÓ¡µ½²»Í¬µÄµØ·½£¬FileHandlerÓÃÀ´´òÓ¡µ½ÎļþÖУ¬StreamHandler ÓÃÀ´´òÓ¡µ½ÖÕ¶Ë
Formatter ¶ÔÏ󣺿ÉÒÔ¶¨ÖƲ»Í¬µÄÈÕÖ¾¸ñʽ¶ÔÏó£¬È»ºó°ó¶¨¸ø²»Í¬µÄ Handler ¶ÔÏóʹÓã¬ÒÔ´ËÀ´¿ØÖƲ»Í¬µÄHandler µÄÈÕÖ¾¸ñʽ
'''
critical=50
error =40
warning =30
info = 20
debug =10
'''
import logging
#1¡¢logger¶ÔÏ󣺸ºÔð²úÉúÈÕÖ¾£¬È»ºó½»¸ø Filter ¹ýÂË£¬È»ºó½»¸ø²»Í¬µÄHandlerÊä³ö
logger = logging.getLogger (__file__)
#2¡¢Filter ¶ÔÏ󣺲»³£Óã¬ÂÔ
#3¡¢Handler ¶ÔÏ󣺽ÓÊÕ logger ´«À´µÄÈÕÖ¾£¬È»ºó¿ØÖÆÊä³ö
h1=logging.FileHandler ('t1.log') #´òÓ¡µ½Îļþ
h2=logging.FileHandler ('t2.log') #´òÓ¡µ½Îļþ
h3=logging.StreamHandler () # ´òÓ¡µ½ÖÕ¶Ë
#4¡¢Formatter¶ÔÏó£ºÈÕÖ¾¸ñʽ
formmater1 = logging.Formatter ('%(asctime)s - %(name) s - % (levelname)s -% (module)s: % ( message) s',
datefmt = '%Y-%m-%d %H:%M:%S %p',)
formmater2 = logging.Formatter ('%(asctime)s : % ( message) s',
datefmt = '%Y-%m-%d %H:%M:%S %p',)
formmater3 = logging.Formatter ('%(name)s %( message)s',)
#5¡¢Îª Handler ¶ÔÏó°ó¶¨¸ñʽ
h1.setFormatter (formmater1)
h2.setFormatter (formmater2)
h3.setFormatter (formmater3)
#6¡¢½«HandlerÌí¼Ó¸ø logger ²¢ÉèÖÃÈÕÖ¾¼¶±ð
logger.addHandler (h1)
logger.addHandler (h2)
logger.addHandler (h3)
logger.setLevel (10)
#7¡¢²âÊÔ
logger.debug ('debug')
logger.info ('info')
logger.warning ('warning')
logger.error ('error')
logger.critical ('critical')

LoggerÓëHandlerµÄ¼¶±ð

loggerÊǵÚÒ»¼¶¹ýÂË£¬È»ºó²ÅÄܵ½handler£¬ÎÒÃÇ¿ÉÒÔ¸øloggerºÍhandlerͬʱÉèÖÃlevel£¬µ«ÊÇÐèҪעÒâµÄÊÇ

Logger is also the first to filter the message based on a level ¡ª if you set the logger to INFO, and all handlers to DEBUG, you still won't receive DEBUG messages on handlers ¡ª they'll be rejected by the logger itself. If you set logger to DEBUG, but all handlers to INFO, you won't receive any DEBUG messages either ¡ª because while the logger says "ok, process this", the handlers reject it (DEBUG < INFO).
#ÑéÖ¤
import logging
form=logging.Formatter ('%(asctime)s - %(name)s - % (levelname)s -%(module)s: %(message)s',
datefmt = '%Y-%m-%d %H:%M:%S %p',)
ch=logging.StreamHandler ()
ch.setFormatter (form)
# ch.setLevel (10)
ch.setLevel (20)
l1=logging.getLogger ('root')
# l1.setLevel (20)
l1.setLevel (10)
l1.addHandler (ch)
l1.debug ('l1 debug')
ÖØÒª£¬ÖØÒª£¬ÖØÒª£¡£¡£¡

LoggerµÄ¼Ì³Ð(Á˽â)

import logging
formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',)
ch=logging.StreamHandler()
ch.setFormatter(formatter)
logger1=logging.getLogger('root')
logger2=logging.getLogger('root.child1')
logger3=logging.getLogger('root.child1.child2')
logger1.addHandler(ch)
logger2.addHandler(ch)
logger3.addHandler(ch)
logger1.setLevel(10)
logger2.setLevel(10)
logger3.setLevel(10)
logger1.debug('log1 debug')
logger2.debug('log2 debug')
logger3.debug('log3 debug')
'''
2017-07-28 22:22:05 PM - root - DEBUG -test: log1 debug
2017-07-28 22:22:05 PM - root.child1 - DEBUG -test: log2 debug
2017-07-28 22:22:05 PM - root.child1 - DEBUG -test: log2 debug
2017-07-28 22:22:05 PM - root.child1.child2 - DEBUG -test: log3 debug
2017-07-28 22:22:05 PM - root.child1.child2 - DEBUG -test: log3 debug
2017-07-28 22:22:05 PM - root.child1.child2 - DEBUG -test: log3 debug
'''
Á˽⼴¿É

loggingÓ¦ÓÃ

"""
loggingÅäÖÃ
"""
import os
import logging.config
# ¶¨ÒåÈýÖÖÈÕÖ¾Êä³ö¸ñʽ ¿ªÊ¼
standard_format = '[%(asctime)s] [%(threadName)s: %(thread)d] [task_id:%(name)s] [%(filename)s: % (lineno)d]' \
'[%(levelname)s] [%(message)s]' # ÆäÖÐnameΪgetloggerÖ¸¶¨µÄÃû×Ö
simple_format = '[%(levelname)s] [%(asctime)s] [%(filename)s: %(lineno)d] %(message)s'
id_simple_format = '[%(levelname)s] [%(asctime)s] %(message)s'
# ¶¨ÒåÈÕÖ¾Êä³ö¸ñʽ ½áÊø
logfile_dir = os.path.dirname (os.path.abspath(__file__)) # logÎļþµÄĿ¼
logfile_name = 'all2.log' # logÎļþÃû
# Èç¹û²»´æÔÚ¶¨ÒåµÄÈÕ־Ŀ¼¾Í´´½¨Ò»¸ö
if not os.path.isdir (logfile_dir):
os.mkdir (logfile_dir)
# logÎļþµÄȫ·¾¶
logfile_path = os.path.join (logfile_dir, logfile_name)
# logÅäÖÃ×Öµä
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#´òÓ¡µ½Öն˵ÄÈÕÖ¾
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # ´òÓ¡µ½ÆÁÄ»
'formatter': 'simple'
},
#´òÓ¡µ½ÎļþµÄÈÕÖ¾,ÊÕ¼¯info¼°ÒÔÉϵÄÈÕÖ¾
'default': {
'level': 'DEBUG',
'class': 'logging.handlers. RotatingFileHandler', # ±£´æµ½Îļþ
'formatter': 'standard',
'filename': logfile_path, # ÈÕÖ¾Îļþ
'maxBytes': 1024*1024*5, # ÈÕÖ¾´óС 5M
'backupCount': 5,
'encoding': 'utf-8', # ÈÕÖ¾ÎļþµÄ±àÂ룬ÔÙÒ²²»Óõ£ÐÄÖÐÎÄlogÂÒÂëÁË
},
},
'loggers': {
#logging.getLogger (__name__)Äõ½µÄloggerÅäÖÃ
'': {
'handlers': ['default', 'console'], # ÕâÀï°ÑÉÏÃæ¶¨ÒåµÄÁ½¸öhandler¶¼¼ÓÉÏ£¬¼´logÊý¾Ý¼ÈдÈëÎļþÓÖ´òÓ¡µ½ÆÁÄ»
'level': 'DEBUG',
'propagate': True, # ÏòÉÏ£¨¸ü¸ßlevelµÄlogger£©´«µÝ
},
},
}
def load_ my_logging_cfg ():
logging. config.dictConfig (LOGGING_DIC) # µ¼ÈëÉÏÃæ¶¨ÒåµÄloggingÅäÖÃ
logger = logging.getLogger (__name__) # Éú³ÉÒ»¸ölogʵÀý
logger. info ('It works!') # ¼Ç¼¸ÃÎļþµÄÔËÐÐ״̬
if __name__ = = '__main__':
load_my_logging_ cfg ()
logging ÅäÖÃÎļþ

"""
MyLogging Test
"""
import time
import logging
import my_logging # µ¼Èë×Ô¶¨ÒåµÄloggingÅäÖÃ
logger = logging.getLogger(__name__) # Éú³ÉloggerʵÀý
def demo():
logger.debug ("start range... time:{}".format(time.time()))
logger.info ("ÖÐÎIJâÊÔ¿ªÊ¼¡£¡£¡£")
for i in range(10):
logger.debug ("i:{}".format(i))
time.sleep(0.2)
else:
logger.debug ("over range... time:{}".format (time.time()))
logger.info("ÖÐÎIJâÊÔ½áÊø¡£¡£¡£")
if __name__ == "__main__":
my_logging.load_my_logging_cfg() # ÔÚÄã³ÌÐòÎļþµÄÈë¿Ú¼ÓÔØ×Ô¶¨ÒåloggingÅäÖÃ
demo ()
Ó¦ÓÃ

×¢Òâ×¢Òâ×¢Ò⣺
#1¡¢ÓÐÁËÉÏÊö·½Ê½ÎÒÃǵĺô¦ÊÇ£ºËùÓÐÓë logging Ä£¿éÓйصÄÅäÖö¼Ð´µ½×ÖµäÖоͿÉÒÔÁË£¬¸ü¼ÓÇåÎú£¬·½±ã¹ÜÀí
#2¡¢ÎÒÃÇÐèÒª½â¾öµÄÎÊÌâÊÇ£º
1¡¢´Ó×Öµä¼ÓÔØÅäÖãºlogging.config.dictConfig ( settings .LOGGING_DIC)
2¡¢Äõ½logger¶ÔÏóÀ´²úÉúÈÕÖ¾
logger ¶ÔÏó¶¼ÊÇÅäÖõ½×ÖµäµÄ loggers ¼ü¶ÔÓ¦µÄ×Ó×ÖµäÖеÄ
°´ÕÕÎÒÃÇ¶Ô logging Ä£¿éµÄÀí½â£¬ÒªÏë»ñȡij¸ö¶«Î÷¶¼ÊÇͨ¹ýÃû×Ö£¬Ò²¾ÍÊÇkeyÀ´»ñÈ¡µÄ
ÓÚÊÇÎÒÃÇÒª»ñÈ¡²»Í¬µÄ logger ¶ÔÏó¾ÍÊÇ
logge r= logging .getLogger ('loggers×Ó×ÖµäµÄkeyÃû')
µ«ÎÊÌâÊÇ£ºÈç¹ûÎÒÃÇÏëÒª²»Í¬ loggerÃûµÄ logger¶ÔÏó¶¼¹²ÓÃÒ»¶ÎÅäÖã¬ÄÇô¿Ï¶¨²»ÄÜÔÚ loggers×Ó×ÖµäÖж¨Òån¸ökey
'loggers': {
'l1': {
'handlers': ['default', 'console'], #
'level': 'DEBUG',
'propagate': True, # ÏòÉÏ£¨¸ü¸ßlevelµÄlogger£©´«µÝ
},
'l2: {
'handlers': ['default', 'console' ],
'level': 'DEBUG',
'propagate': False, # ÏòÉÏ£¨¸ü¸ßlevelµÄlogger£©´«µÝ
},
'l3': {
'handlers': ['default', 'console'], #
'level': 'DEBUG',
'propagate': True, # ÏòÉÏ£¨¸ü¸ßlevelµÄlogger£©´«µÝ
},
}
#ÎÒÃǵĽâ¾ö·½Ê½ÊÇ£¬¶¨ÒåÒ»¸ö¿ÕµÄkey
'loggers': {
'': {
'handlers': ['default', 'console'],
'level': 'DEBUG',
'propagate': True,
},
}
ÕâÑùÎÒÃÇÔÙÈ¡logger¶ÔÏóʱ
logging. getLogger (__name__)£¬²»Í¬µÄÎļþ__name__²»Í¬£¬Õâ±£Ö¤ÁË´òÓ¡ÈÕ־ʱ±êʶÐÅÏ¢²»Í¬£¬µ«ÊÇÄÃןÃÃû×ÖÈ¥ loggersÀïÕÒ keyÃûʱȴ·¢ÏÖÕÒ²»µ½£¬ÓÚÊÇĬÈÏʹÓÃkey =''µÄÅäÖÃ
!!!¹ØÓÚÈçºÎÄõ½ logger ¶ÔÏóµÄÏêϸ½âÊÍ£¡£¡£¡

ÁíÍâÒ»¸ödjangoµÄÅäÖã¬ÃéÒ»Ñ۾ͿÉÒÔ£¬¸úÉÏÃæµÄÒ»Ñù

#logging_config.py
LOGGING = {
'version': 1,
'disable_ existing_loggers': False,
'formatters': {
'standard': {
'format': '[%(asctime)s] [%(threadName)s :% (thread) d] [task_id:%(name)s] [%(filename)s :% (lineno)d]'
'[%(levelname)s] [%(message)s]'
},
'simple': {
'format': '[%(levelname)s] [%(asctime)s] [%( filename)s: %(lineno)d] %(message)s'
},
'collect': {
'format': '%(message)s'
}
},
'filters': {
'require_debug_true': {
'()' : 'django.utils .log. RequireDebugTrue',
},
},
'handlers': {
#´òÓ¡µ½Öն˵ÄÈÕÖ¾
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class' : 'logging .StreamHandler',
'formatter': 'simple'
},
#´òÓ¡µ½ÎļþµÄÈÕÖ¾,ÊÕ¼¯info¼°ÒÔÉϵÄÈÕÖ¾
'default': {
'level': 'INFO',
'class': 'logging.handlers. RotatingFileHandler', # ±£´æµ½Îļþ£¬×Ô¶¯ÇÐ
'filename': os.path.join (BASE_LOG_DIR, "xxx_ info.log "), # ÈÕÖ¾Îļþ
'maxBytes': 1024 * 1024 * 5, # ÈÕÖ¾´óС 5M
'backupCount': 3,
'formatter': 'standard',
'encoding': 'utf-8',
},
#´òÓ¡µ½ÎļþµÄÈÕÖ¾:ÊÕ¼¯´íÎó¼°ÒÔÉϵÄÈÕÖ¾
'error': {
'level': 'ERROR',
'class': 'logging.handlers .RotatingFileHandler', # ±£´æµ½Îļþ£¬×Ô¶¯ÇÐ
'filename': os.path.join (BASE_LOG_DIR, "xxx_err.log"), # ÈÕÖ¾Îļþ
'maxBytes': 1024 * 1024 * 5, # ÈÕÖ¾´óС 5M
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8',
},
#´òÓ¡µ½ÎļþµÄÈÕÖ¾
'collect': {
'level': 'INFO',
'class': 'logging.handlers .RotatingFileHandler', # ±£´æµ½Îļþ£¬×Ô¶¯ÇÐ
'filename': os.path.join (BASE_LOG_DIR, "xxx_collect.log"),
'maxBytes': 1024 * 1024 * 5, # ÈÕÖ¾´óС 5M
'backupCount': 5,
'formatter': 'collect',
'encoding': "utf-8"
}
},
'loggers': {
#logging.getLogger (__name__)Äõ½µÄloggerÅäÖÃ
'': {
'handlers': ['default', 'console', 'error'],
'level': 'DEBUG',
'propagate': True,
},
#logging.getLogger ('collect')Äõ½µÄloggerÅäÖÃ
'collect': {
'handlers': ['console', 'collect'],
'level': 'INFO',
}
},
}
# -----------
# Ó÷¨:Äõ½Á©¸ölogger
logger = logging.getLogger (__name__) #ÏßÉÏÕý³£µÄÈÕÖ¾
collect_logger = logging.getLogger ("collect") #Á쵼˵,ÐèҪΪÁìµ¼Ãǵ¥¶À¶¨ÖÆÁìµ¼ÃÇ¿´µÄÈÕÖ¾
   
6247 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ