风湿,秋刀鱼的做法-二次元恩仇录,二次元的真实世界

怎么判别U盘的刺进与否?

首要咱们翻开电脑终端,进入/Volum杭州气候24小时es目录,这时分刺进U盘,能够发现它被挂载在了这个目录之下,也便是说,咱们只需在固定时刻扫描这个目录,当这个目录有新风湿,秋刀鱼的做法-二次元恩仇录,二次元的实在国际文件夹呈现的时分,很可能有U盘被刺进了。

我的规划是这样的,用time.sleep(3)函数,让程序坚持运转状况,而且每隔三秒检查一下/Volumes/目录,假如多出来文件夹,就将其仿制到别的的文件夹。

# encoding=utf-8
from time import sleep
import os, shutil
usb_path = "/Volumes/"
content = os.listdir(usb_path) # os.listdir(途径)回来途径下一切文件以及文件夹的名风湿,秋刀鱼的做法-二次元恩仇录,二次元的实在国际称
while True:
new_content = os.listdir(usb_path) #每隔三秒扫描一次/Volumes/
if new_content != content: # 假如发现异常,即多出一个文件夹,则退出
break;
sleep(3)
x = [item for item in new_content if item no贺卫方处理成果t in content]
# 找到那个新文件夹,回来陈丹青老婆彭薇包含新文件夹string类型称号的列表,这个表达方法很pythonic
shutil.copytree(os.path.join(usb_path, x[0]), '/Users/home/usb_copy')
# shutil.copytree 把目录下一切东西一股脑仿制进/Users/home/usb_copy,
# 放进了自己的home目录下

就像标题所示,咱们真的只用了10行(其实是11行,凑个整:)完成了这个“病毒”。咱们能够发现usb中的目录,在刺进半分钟后悉数躺在了home目录下了。

怎么挑选性的仿制文件?

刚刚风湿,秋刀鱼的做法-二次元恩仇录,二次元的实在国际咱们写了一个很简易的脚本测验了一下这个主意的可行性,可是仍是有问题。方才之所以能把U盘中一切文件很快仿制进去,是因为U盘中只需两三个文件,巨细不超越15M。如戴美施简介果方针U盘中有许多电影,音乐,这些咱们并不需求的文件,咱们的程序就应该能越过它们,只是挑选一些重要的比方.docx比方.ppt文件,或许只是仿制最近修正正的那些文件,或许扫除一切巨细大于5M的文件。咱们能够用python做到吗?爱情公寓名字暗藏玄机当然!

举个比方吧。

我在某目录下创立了tesguiz163twalk文件夹,里边有file123.txt三个文件,folder123三个文件夹,其间folder1中有文件file4.txt以及folder4

➜ testwalk touch file1.txt file2.txt file3.txt
➜ testwalk mkdir folder1 folder2 folder3
➜ testwalk cd folder1
➜ folder1 touch file4.txt && mkdir folder4
➜ folder1 cd ..
# 上面创立了这些文件以及文件夹,你也能够在图形界面上创立
# tree 是个很好玩的指令,能够直观地显示文件途径
➜ testwalk tree ./
testwalk/
├── file1.txt
├── file2.txt
├── file3.txt
├── folder1
│ ├── file4.txt
│ └── folder4
├── folder2
└── folder风湿,秋刀鱼的做法-二次元恩仇录,二次元的实在国际3
4 directories, 4 files

现在咱们来测验风湿,秋刀鱼的做法-二次元恩仇录,二次元的实在国际一下

import os
for root, dirs, files in os.walk("./testwalk/"):
for name in files:
print(os.path.join(root, name))
for nam大理昌杨记e in dirs:
print(os.path.join(root, name))
-----------------------------------------------------------------------------
运转成果:
./testwalk/folder1/file4.txt
./testwalk/folder1/folder4
./testwalk/file2.txt
./testwalk/file3.txt
./testwalk/file1.txt
./testwalk/folder2
./testwalk/folder3
./testwalk/folder1

root寄存的是当时方位,它会把./testwalk/下一切的文件夹作为根目录,往下查找

for root, dirs, files in os.walk("./testwalk/", topdown=False):
print(root)
./testwa0755950509lk/folder2
./testwalk/folder3
./testwalk/folder1/folder4
./testwalk/folder1
./testwalk/

独自检查 dirs

for roo风湿,秋刀鱼的做法-二次元恩仇录,二次元的实在国际t, dirs, files in os.walk("./testwalk/"):
for name in dirs:
print(os.path.join(root, name))
./testwalk/folder2
./testwalk/folder3
./testwalk/noneblrfolder1
./testwalk/folder1/folder4

独自检查 files

for root, dirs, files in os.walk("./testwalk/", topdown=False):
for name in files:
print(os.path.join(root, name))
./testwalk/file2.txt
./testwal惊怖驮骡k/file3.txt
./testwalk/file1.tx柯恩认罪t
./testwalk/folder1/file4.txt

好了,咱们现在需求递归usb文件夹,找到一切的file,检查巨细,假如小于崔韩光,比方3M,就仿制进home,大于就舍去。

shutil模块

import shutil
>>> help(shutil)
>>> dir(shutil)
['Error', 'ExecError', 'SpecialFileError', 'Win眼舒宝dowsError',
'_ARCHIVE_FORMATS', '_BZ2_SUPPORTED', '_ZLIB_SUPPORTED', '__all__',
'__builtins__', '__doc__', '__file__', '__name__', '__package__',
'_basename', '_call_external_zip', '_destinsrc', '_get_gid', '_get_uid',
'_make_tarball', '_make_zipfile', '_samefile', 'abspath',
'collections', 'copy', 'copy2', 'copyfile', 'copyfileobj',
'copymode', 'copystat', 'copytree', 'errno', 'fnmatch',
'get_archive_formats', 'getgrnam', 'getpwnam', 'ignore_patterns',
'make_archive', 'move', 'os', 'register_archive_format', 'rmtree',
'stat', 'sys', 'unregister_archive_format']

好吧,看不懂,仍是得看。

现在咱们拿方才的文件夹举比方,假如想把file1.txt仿制到folder2:

>>> shutil.copy2('./file1.txt', './folder2')
------------------------------------------------我是分割线-----------
➜ folder2 ls
file1.txt

还有许多运用东西在shutil里边这儿就不胪陈了。

os.path.getsize()判别巨细

os.path.getsize(文件名)回来的是一个单位为byte的数值,假如用来检查文件巨细,咱们则需求手动写一个函数,将其换算成简单阅览的方式。

movie = /Users/home/somemovie.rmvb
def convert_bytes(num):
# this function will convert石家庄大保健 bytes to MB.... GB... etc
for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
if num < 1024.0:
return "%3.1f %s华润衢州医药有限公司" % (num, x)
num /= 1024.0
def getDocSize(path):
try:
size = os.path.getsize(path)
return size
exc南师大毕博渠道ept Exception as err:
print(err)
print(convert_bytes(getDocSize(movie)))
成果:
1.3 GB
[Finished in 0.1s]

这儿咱们只需挑选文件巨细小于3M的即可,3M = 3 * 1024kB = 3 * 1024*1024byte

for root, dirs, files in os.walk(os.path.join(usb_path, x[0])): #MyUSB location
for name in files:
file = os.path.join(root, name)
if os.path.getsize(file) < 3*1024*1024:
shutil.copy2(file, target_folder)

结合shutil.copy2就能够把选定巨细的文件仿制进咱们的方针文件夹了

怎么指定文件类型

这儿就需求正则表达式来协助咱们了得宝迪赞尼。

如下,咱们让指定文 件后缀以及指定黄h文件巨细能够仿制进咱们的方针文件:

别忘了导入 re

import re
...
regex_filename = re.compile('(.*zip$)|(.*刘良芳rar$)|(.*docx$)|(.*ppt$)|(.*xls$)')
for root, dirs, files in os.walk(os.path.join(usb_path, x[0])): #MyUSB location
for name in files:
file = os.path.join(root, name)
if regex_filename.match(file) and os.path.getsize(file) < 1024*1024:
shutil.copy2(file, target_folder)

用愈加杂乱的正则表达式能够更好地指定文件类型

依据修正时刻挑选文件

>>> from os.path import *
>>> help(getmtime)
getmtime(filename)
Return the last modification time of a file, reported by os.stat().
>>> help(getctime)
getctime(filename)
Return the metadata change time of a file, reported by os.stat().

这时分我在目录下创立了一个文件叫做newfile

>>> getctime("newfile")
1522746383.716875
# 咱们能够看到回来的time是从某个时刻到现在的秒数,如需阅览,咱们需求time.ctime来转化
>>> import time
>>> time.ctime(1522746383.716875)
'Tue Apr 3 17:06:23 2018' # 这便是方才创立的时刻啦
>>> help(time.ctime)ctime(...) # 检查文档
ctime(seconds) -> string
Convert a time in seconds since the Epoch to a string in local time.
This is equivalent to asctime(localtime(seconds)). When the time tuple is
not present, current ti风湿,秋刀鱼的做法-二次元恩仇录,二次元的实在国际me as returned by localtime() is used.

总归,对每一个文件进行修正时刻的挑选能够只仿制那些近期,或许特定时期修正或许添加过的文件,这个功能在特定情况下很有用。

2019Python课程体系全新晋级为《Python+数据剖析+机器学习》,九大阶段才能逐级提高,打造技术更全面的全栈工程师。

以上这些教程小编现已为我们打包预备好了,期望对正在学习的你有所协助!

请我们转发本文+重视并私信小编:“材料”,即可免费获取哦!

Ps:小编和高教师熟的很,一切资源当然是我第一时刻拿到手啦!哈哈,重视柠檬,更多干货等着你!

点击展开全文

上一篇:

下一篇:

相关推荐