閱讀文本大概須要 6 分鐘。python
Python 這門語言有很是多有趣的內容,好比給微信好友自動發消息、查看微信好友撤回的消息、經過微信控制電腦等等。在我公衆號上也分享過不少有趣的程序,近期我會去搜集一些騷操做的 Python 程序分享給你們,並命名「Python 騷操做」專欄,持續更新!文中一些程序可能來自別人的文章,但若是我以爲程序還有所改進的地方,我會繼續添加一些代碼,而且我會在文末標註原程序出處。編程
今天的「Python 騷操做」,分享的是一個自動拷貝電腦 U 盤內容的程序。當別人的 U 盤插入到你的電腦上時,Python 腳本會自動把 U 盤全部的內容,所有拷貝到你的電腦上。腳本每隔 5 秒掃描當前電腦是否有 U 盤插入,若是是已拷貝過的內容,則不會重複拷貝,每一個相應的操做都會記錄到日誌文件中。windows
若是剛好這個 U 盤裏有某些室友的「學習視頻」,好比下的圖片。數組
那騷氣指數 10 顆星!微信
注意此程序只是用來學習交流,切勿違法使用。函數
Python 騷思路學習
在 windows 系統中,當有 U 盤插入到你的電腦上時,會給它分配一個磁盤名稱,好比在個人電腦上分配的是「J」。因此我會先定義一個「USB_FILE」變量,表示 U 盤所在的目錄。spa
咱們利用 os 庫來判斷當前系統是否有「USB_FILE」,若是掃描到當前系統有這個目錄,說明有 U 盤插入到當前電腦上。隨後咱們經過 shutil 庫,把 U 盤裏的內容所有拷貝到本身的電腦上。在每一個操做之間我添加了 input_log() 方法,用來把當前相應的操做記錄到日誌文件中。 3d
Python 騷源碼日誌
程序主要是由三個函數組成,get_dirs_size()、main()、input_log()。
get_dirs_size()
get_dirs_size() 主要是返回要拷貝 U 盤的長度,用來判斷當前要拷貝的內容是否已經重複,若是重複則無需從新拷貝。
def get_dirs_size(dir): size = 0 for root, dirs, files in os.walk(dir): size += sum([getsize(join(root, name)) for name in files]) print(size) return size
main()
main() 用來執行主邏輯代碼,即每隔 5 秒檢查當前電腦是否有 U 盤插入。若是檢查到,則記錄當前 U 盤的長度。在下一次檢測的時候,若是當前的長度沒有發生變化,則無需從新拷貝。每一個操做都會記錄到日誌中,以便往後查看相應的拷貝信息。
def main(): old_size = 0 new_dirsize = 0 while(1): if os.path.exists(USB_PATH): print("檢測到 U 盤") input_log("檢測到 U 盤") new_dirsize = get_dirs_size(USB_PATH) if old_size != new_dirsize: for filename in os.listdir(USB_PATH): print("拷貝了:" + filename) input_log("拷貝了:" + filename) shutil.copytree(USB_PATH, SAVE_PATH) old_size = new_dirsize else: print("U 盤沒有變化") input_log("U 盤沒有變化") else: print("暫時沒有 U 判斷") print("開始休眠") input_log("開始休眠") sleep(5) print("休眠結束,從新檢測") input_log("休眠結束,從新檢測")
input_log() 利用 logging 庫,來把相應的操做信息保存到一個日誌文件中。
def input_log(message): handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes=1024 * 1024, backupCount=5, encoding='utf-8') # 實例化handler fmt = '%(asctime)s - %(levelname)s - %(message)s' formatter = logging.Formatter(fmt) # 實例化formatter handler.setFormatter(formatter) # 爲handler添加formatter logger = logging.getLogger('tst') # 獲取名爲tst的logger logger.addHandler(handler) # 爲logger添加handler logger.setLevel(logging.DEBUG) logger.info(message)
Python 騷教程
這次的程序使用很是簡單,首先下載源碼,後臺回覆「拷貝」便可獲取源碼。而後修改下 USB_PATH 和 SAVE_PATH,這兩個參數表示的是你 U 盤所屬的位置和你想要保存的目錄。
LOG_FILE = "test.log" USB_PATH = "J:\\" SAVE_PATH = "D:\\disk_copy"
原程序參考來源:
http://uuzdaisuki.com/2018/03...
本文首發於公衆號「癡海」,後臺回覆「1024」便可獲取最新編程資源。
好比這樣的:史上最全 Python 學習資料,PDF 電子書大合集