1. 程式人生 > >Python 騷操作,自動拷貝U盤

Python 騷操作,自動拷貝U盤

閱讀文字大概需要 6 分鐘。

Python 這門語言有非常多有趣的內容,比如給微信好友自動發訊息、檢視微信好友撤回的訊息、通過微信控制電腦等等。在我公眾號上也分享過很多有趣的程式,近期我會去搜集一些騷操作的 Python 程式分享給大家,並命名「Python 騷操作」專欄,持續更新!文中一些程式可能來自別人的文章,但如果我覺得程式還有所改進的地方,我會繼續新增一些程式碼,並且我會在文末標註原程式出處。

今天的「Python 騷操作」,分享的是一個自動拷貝電腦 U 盤內容的程式。當別人的 U 盤插入到你的電腦上時,Python 指令碼會自動把 U 盤所有的內容,全部拷貝到你的電腦上。指令碼每隔 5 秒掃描當前電腦是否有 U 盤插入,如果是已拷貝過的內容,則不會重複拷貝,每個相應的操作都會記錄到日誌檔案中。

如果恰好這個 U 盤裡有某些室友的「學習視訊」,比如下的圖片。

那騷氣指數 10 顆星!

注意此程式只是用來學習交流,切勿違法使用。

Python 騷思路

在 windows 系統中,當有 U 盤插入到你的電腦上時,會給它分配一個磁碟名稱,比如在我的電腦上分配的是「J」。所以我會先定義一個「USB_FILE」變數,表示 U 盤所在的目錄。

我們利用 os 庫來判斷當前系統是否有「USB_FILE」,如果掃描到當前系統有這個目錄,說明有 U 盤插入到當前電腦上。隨後我們通過 shutil 庫,把 U 盤裡的內容全部拷貝到自己的電腦上。在每個操作之間我添加了 input_log() 方法,用來把當前相應的操作記錄到日誌檔案中。

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"

原程式參考來源:

本文首發於公眾號「痴海」,後臺回覆「1024」即可獲取最新程式設計資源。

痴海