遞迴練習 shutil模組 logging模組

2021-10-05 01:28:32 字數 3950 閱讀 4077

os模組:檢視乙個資料夾下的所有檔案,這個資料夾下面還有資料夾,不能用walk

import os

defshow_file

(path)

: name_lst = os.listdir(path)

for name in name_lst:

abs_path = os.path.join(path,name)

if os.path.isfile(abs_path)

:print

(name)

elif os.path.isdir(abs_path)

: show_file(abs_path)

show_file(

'd:\python_22\day21'

)

計算斐波那契數列找第100個數

def

fib(n,a=

1,b=1)

:if n ==

1or n ==2:

return b

else

: a,b = b,a+b

return fib(n-

1,a,b)

ret = fib(

100)

print

(ret)

#----------------------------------

# 使用迴圈

deffib

(n):

a,b =1,

1while n>2:

a,b = b,a+b

n-=1return b

ret = fib(

100)

print

(ret)

**選單 但是級數可能是n級

#選單

menu =

,'網易':,

'google':}

,'中關村':,

'汽車之家':,

'youku':,

},'上地':,

},},

'昌平':,

'北航':,

},'天通苑':,

'回龍觀':,

},'朝陽':,

'東城':,

},'上海':}

},'閘北':}

},'浦東':,

},'山東':,

}#遞迴函式實現**選單

defthreelm

(dic)

: flag = ture

while flag:

for name in menu:

print

(name)

key =

input

('>>>'

).strip(

)if menu.get(key)

: dic = menu[key]

ret = threelm(dic)

flog = ret

elif key.upper()==

'b':

return

true

elif key.upper()==

'q':

return

true

threelm(menu)

import shutil

shutil.copy2(

'd:\python_22\day21\lianjia.html'

,'d:\python_22\day21\lianjia_bk.html'

)#複製檔案

shutil.copytree(

"outer"

,"outer3"

, ignore=shutil.ignore_patterns(

"__init__.py"

,#填入忽略檔案))#複製目錄

shutil.rmtree(

"d:\python_22\day21\outer3"

)#移動目錄

shutil.move(

"d:\python_22\day21\day20_bak"

,"d:\python_22\day20"

, copy_function=shutil.copy2)

#移動檔案

total, used, free = shutil.disk_usage(

"c:\\"

)print

("當前磁碟共: %igb, 已使用: %igb, 剩餘: %igb"

%(total /

1073741824

, used /

1073741824

, free /

1073741824

))顯示磁碟大小

shutil.make_archive(

'outer_z'

,'zip'

,'d:\python_22\day21\outer'

)#加壓檔案

shutil.unpack_archive(

'outer_z.zip'

,r'd:\python_22\day21\unzip'

)#解壓檔案

logging模組–日誌部分

# 同時向檔案和螢幕上輸出和解決亂碼

fh = logging.filehandler(

'tmp.log'

,encoding=

'utf-8'

)sh = logging.streamhandler(

)logging.basicconfig(

format

='%(asctime)s - %(name)s - %(levelname)s[line :%(lineno)d]-%(module)s: %(message)s'

, datefmt=

'%y-%m-%d %h:%m:%s %p'

, level= logging.debug,

handlers=

[fh,sh]

)

日誌切分

# 做日誌的切分

import time

from logging import handlers

sh = logging.streamhandler(

)rh = handlers.rotatingfilehandler(

, maxbytes=

1024

,backupcount=5)

# 按照大小做切割

fh = handlers.timedrotatingfilehandler(filename=

'x2.log'

, when=

's', interval=

5, encoding=

'utf-8'

)#按照時間進行切割

logging.basicconfig(

format

='%(asctime)s - %(name)s - %(levelname)s[line :%(lineno)d]-%(module)s: %(message)s'

, datefmt=

'%y-%m-%d %h:%m:%s %p'

, level= logging.debug,

# handlers=[fh,sh,fh2]

handlers=

[fh,rh,sh]

)for i in

range(1

,10000):

# 寫入一萬次做演示效果

time.sleep(1)

logging.error(

'keyboardinterrupt error %s'

%str

(i))

shutil 模組 os模組

shutil.copyfile src,dst 從源src複製到dst中去。如果當前的dst已存在的話就會被覆蓋掉 shutil.move src,dst 移動檔案或重新命名 shutil.copymode src,dst 只是會複製其許可權其他的東西是不會被複製的 shutil.copystat ...

logging模組,shutil模組

用於便捷記錄日誌且執行緒安全的模組 1 單檔案日誌 import logging logging.basicconfig filename 檔名.log format asctime s name s levelname s module s message s datefmt y m d h m ...

shutil模組 python shutil模組

shutil.copyfile src,dst 從源src複製到dst中去。當然前提是目標位址是具備可寫許可權。丟擲的異常資訊為ioexception.如果當前的dst已存在的話就會被覆蓋掉 shutil.move src,dst 移動檔案或重新命名 shutil.copymode src,dst ...