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」即可獲取最新程式設計資源。