吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6259|回复: 22
收起左侧

[Python 转载] python自动检测并拷贝U盘文件

[复制链接]
py看考场 发表于 2019-3-14 02:06
本帖最后由 py看考场 于 2019-3-17 22:59 编辑

今天刚注册完账号,想着一边学习一些软件破解的技术,一边为大家分享一些有趣的python实例,欢迎大家讨论及更正。。

一.实现要点:
1.如何检测U盘插入
2.如何复制目录树
3.如何写入文件


二.主要应用模块:
os 文件目录操作

shutil 高级文件目录处理
re 正则匹配
time
pyinstaller 打包

三.代码如下:

方法1:
[Python] 纯文本查看 复制代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author : jin  time :2019/3/4
import os
import time
import shutil

#U盘的盘符
u_disk_path = input('请输入你的U盘盘符:')
u_disk_path += ':/'

#文件拷贝到的路径
save_to_path = './'

#开启一个死循环,每十秒检测一次,直到检测到U盘的插入
while True:
    if os.path.exists(u_disk_path):
        #copytree('olddir','newdir')
        shutil.copytree(u_disk_path, os.path.join(save_to_path, str(time.strftime('%Y-%m-%d_%H-%M-%S', time.localtime()))))
        print('成功拷贝U盘内容')
        break
    else:
        time.sleep(10)


这种方法较为简单,但是有两个缺陷,一是不能指定具体要拷贝文件的类型,二是不能指定要拷贝文件的大小。如果要实现这两个功能,可以参照方法二

方法2:
[Python] 纯文本查看 复制代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author : jin  time :2019/3/5
#可以指定文件的格式与大小
import os, time, shutil, re

#识别文件的格式
regex_filename = re.compile(r'(.*zip$)|(.*rar$)|(.*docx$)|(.*ppt$)|(.*xlx$)|(.*py$)')

def usb_monitor(sleep_time, usb_path, copy_folder):
    if not os.path.exists(copy_folder):
        os.mkdir(copy_folder)
    a = 0
    while True:
        time.sleep(sleep_time)
        start_time = time.time()
        file_num = 0
        try:
            u = os.listdir(usb_path) #用于返回指定的文件夹包含的文件或文件夹的名字的列表
        except FileNotFoundError:
            print('usb is not found')
            a = 0
            continue
        if a > 0:
            print('usb has already copied')
            break
        copy_folder1 = os.path.join(copy_folder, time.strftime('%Y-%m-%d %H-%M', time.localtime()))
        os.mkdir(copy_folder1)
        # root为当前正在遍历的这个文件夹的本身的地址
        # dirs是一个list,内容是该文件夹中所有目录的名字(不包含子目录)
        # files同样是list,内容是该文件夹中的所有的文件(不包含子目录)
        for root, dirs, files in os.walk(usb_path):
            if a == 0:
                print('start copy usb is {}'.format(dirs[0]))
                usb_name = dirs[0]
            a += 1
            if len(files) == 0:
                continue
            for name in files:
                file = os.path.join(root, name)
                if regex_filename.match(file) and os.path.getsize(file) < 1024*1024*2: #字节大小(转化为2M)
                    file_num += 1
                    print(file)
                    file_create_time = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime(os.path.getctime(file))) #输出文件创建时间
                    shutil.copy2(file, copy_folder1) #复制file到copy_folder1中,并且复制文件的权限位
                else:
                    continue
            if file_num == 0:
                print('usb is not found file')
                continue
            print('共下载{}份文件---用时:{}s'.format(file_num, time.time()-start_time))

if __name__ == '__main__':
    usb_monitor(1, 'F:\\', 'save_path')


四.备注:
1.大家可以根据自己盘符的实际情况去修改源码中的盘符
2.也可以根据自己的需求修改要拷贝的文件的类型,以及设定拷贝文件的大小
3.写完程序后还可以打开cmd窗口,把路径切换到程序所在路径,用pyinstaller -F 文件名 对程序进行打包
4.大家还可以提出更好的想法,进行交流

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

山野村夫-陈墨 发表于 2019-3-22 22:56
山野村夫-陈墨 发表于 2019-3-22 22:45
不好意思,提两个建议 :
(1)如果U盘有很多种类的文件呢?比如文本类,doc,docx,txt,wps等等,总不能 ...

不好意思,是我无知。原来你在文章里已经说过了包装了。“Pyinstaller”
山野村夫-陈墨 发表于 2019-3-22 22:45
不好意思,提两个建议 :
(1)如果U盘有很多种类的文件呢?比如文本类,doc,docx,txt,wps等等,总不能一一枚举吧 。
(2)这个程序的作用包装成可执行文件 + windows下的“创建基本任务”效果会更明显。
huaxiao137 发表于 2019-3-14 04:13
Kentan88 发表于 2019-3-14 07:00
不错,支持一下
泰小海 发表于 2019-3-14 07:21
欢迎来到吾爱
jsf001 发表于 2019-3-14 07:38
向大佬们学习
小兔子乖哟01 发表于 2019-3-14 07:42
学习一下   谢谢分享
Xiatian94666 发表于 2019-3-14 07:48
这个可以的 刚好能用到
zhcj66 发表于 2019-3-14 08:08
我也在刚刚开始学习python中,感谢lz分享
qqyyh 发表于 2019-3-14 08:13
大神!!膜拜!!
laity 发表于 2019-3-14 08:31
欢迎来到吾爱!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 05:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表