Python 騷操做,自動拷貝U盤

閱讀文本大概須要 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 電子書大合集

癡海

相關文章
相關標籤/搜索