±à¼ÍƼö: |
±¾ÎÄÀ´Ô´ÓÚ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")
#Á쵼˵,ÐèҪΪÁìµ¼Ãǵ¥¶À¶¨ÖÆÁìµ¼ÃÇ¿´µÄÈÕÖ¾ |
|