其实python下面找文件还是比较简单的 ,主要用到的就是 os.listdir(rootDir)这个函数,这个函数会将rootDir文件夹下所有的文件(不管是文件夹还是文件等等) 的名称存储在一个list 里面, 自己访问的时候记得把 路径处理好,如下,
for dir_or_file in os.listdir(rootDir):
filePath = os.path.join(rootDir, dir_or_file)
然后就可以通过 函数os.path.isfile(filePath) 与之对应的还有os.path.isdir(filePath) 来判断是文件夹还是文件 ,如果是文件夹的话 ,就递归调用原函数,如下
searchDirFile(rootDir, fileList, fileType):
这里说明下参数的作用
rootDir:指你要查找的根目录,(记得用 "\\" 或者 "/")
fileList: fileList,这里可以使用全局变量(其实不用),来存储你寻找的文件 的地址
注意在Python中,一切皆对象, Python参数传递采用的都是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值,相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象,相当于通过“传值’来传递对象,此时如果想改变这些变量的值,可以将这些变量申明为全局变量。
fileType:你要查找的文件类型, if filePath[-len(fileType):] == fileType: 这里我做了下处理,所以fileType = "jpg", " .jpg" 类似这样的加不加 . 都可以
我这个 deleteFile()函数 是准备来删除图片文件(像素 低于 1920*1080)的图片全部删除 ,其他的没什么好说的了,自己看代码吧
from bs4 import BeautifulSoup
import requests
import urllib.request
import re, os
from PIL import Image
def searchDirFile(rootDir, fileList, fileType):
for dir_or_file in os.listdir(rootDir):
filePath = os.path.join(rootDir, dir_or_file)
if os.path.isfile(filePath):
if filePath[-len(fileType):] == fileType:
fileList.append(filePath)
#shutil.copyfile(filePath,os.path.join(saveDir,os.path.basename(filePath)))
else:
continue
elif os.path.isdir(filePath):
searchDirFile(filePath, fileList, fileType)
else:
print('not file and dir '+os.path.basename(filePath))
def deleteFile(fileList):
countDele = 0
count = 0
for path in fileList:
try:
fp = open(path, 'rb')
im = Image.open(fp)
fp.close()
x, y = im.size
if x < 1920 or y < 1080:
os.remove(path)
countDele += 1
count += 1
if count == 100:
print('已删除 100 张图片')
count = 0
except Exception:
continue
return countDele
if __name__ == "__main__":
fileList = list()
path = 'D:\\software_study\\PYTHON\\Project\\DownloadPic'
searchDirFile(path, fileList, '.jpg')
print('已删除 ' + str(deleteFile(fileList)) + ' 张图片')