社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 骚操作,自动拷贝U盘

痴海 • 7 年前 • 636 次点击  

阅读文本大概需要 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()


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/24/%E5%9F%BA%E4%BA%8Epython%E7%9A%84u%E7%9B%98%E8%87%AA%E5%8A%A8%E6%8B%B7%E8%B4%9D%E5%B7%A5%E5%85%B7/


推荐阅读:

Python 骚操作,微信远程控制电脑

Python 顶级开源项目 Top 10

如何自学 Python



人必有痴,而后有成




今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/DimgErWzwF
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22450