文件扫描

下载

https://github.com/YouXianMing/FileManager

细节

1. 基于Python 3.60,其他版本未测试

2. 支持扫描深度,不设置则扫描全部,设置了值,则扫描具体的层级

源码

import os
import time class FileObject:
"""
文件对象
""" def __init__(self, filePath):
"""
创建FileObject对象
:param filePath: 文件路径
""" self.__tree_file_objects = None
self.__scan_depth = None self.__exists = False
self.__file_path = None
self.__is_file = None
self.__is_dir = None
self._is_link = None
self.__size = None
self.__last_modification_time = None
self.__last_access_time = None
self.__metadata_change_time = None
self.__file_name = None
self.__dir_name = None if os.path.exists(filePath): self.__scan_depth = 0
self.__exists = True
self.__file_path = filePath
self.__is_file = os.path.isfile(filePath)
self.__is_dir = os.path.isdir(filePath)
self._is_link = os.path.islink(filePath)
self.__size = os.path.getsize(filePath)
self.__last_modification_time = os.path.getmtime(filePath)
self.__last_access_time = os.path.getatime(filePath)
self.__metadata_change_time = os.path.getctime(filePath)
self.__file_name = os.path.basename(filePath)
self.__dir_name = os.path.dirname(filePath) if self.__is_dir:
self.__tree_file_objects = [] @property
def scan_depth(self):
"""
扫描深度的设置
:return: 设置的扫描深度
"""
return self.__scan_depth @scan_depth.setter
def scan_depth(self, depth):
self.__scan_depth = depth @property
def tree_file_objects(self):
"""
树形对象结构列表
:return: 数组
"""
return self.__tree_file_objects @tree_file_objects.setter
def tree_file_objects(self, fileList): self.__tree_file_objects = fileList @property
def exists(self):
"""
文件是否存在
:return: 存在返回True,不存在返回False
"""
return self.__exists @property
def file_path(self):
"""
文件路径(初始化成功之后可取)
:return: 初始化成功则有路径,没有初始化成功则没有路径
"""
return self.__file_path @property
def is_file(self):
"""
是否是文件(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,是文件返回True,不是文件返回False
"""
return self.__is_file @property
def is_dir(self):
"""
是否是文件夹(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,是文件夹返回True,不是文件返回False
"""
return self.__is_dir @property
def is_link(self):
"""
是否是link(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,是link返回True,不是文件返回False
"""
return self._is_link @property
def size(self):
"""
文件大小(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,返回文件大小
"""
return self.__size @property
def last_modification_time(self):
"""
最后修改时间(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,返回最后修改时间
"""
return self.__last_modification_time @property
def last_access_time(self):
"""
最后操作时间(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,返回最后操作时间
"""
return self.__last_access_time @property
def metadata_change_time(self):
"""
最后元数据修改时间(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,返回最后元数据修改时间
"""
return self.__metadata_change_time @property
def file_name(self):
"""
文件名(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,返回文件名
"""
return self.__file_name @property
def dir_name(self):
"""
文件夹名(初始化成功之后可取)
:return: 未初始化成功返回None,初始化成功时,返回文件夹名
"""
return self.__dir_name def show_info(self): if self.exists:
string = "[%s]\n" % self.file_name
string += "------------------------------------------\n"
string += "filePath : %s\n" % self.file_path
string += "size : %.2f kb\n" % (self.size / 1024.0)
string += "isDir : %s\n" % self.is_dir
string += "isFile : %s\n" % self.is_file
string += "isLink : %s\n" % self.is_link
string += "lastAccessTime : %s\n" % time.strftime('%Y-%m-%d %H:%M:%S %A',
time.localtime(self.last_access_time))
string += "lastModificationTime : %s\n" % time.strftime('%Y-%m-%d %H:%M:%S %A',
time.localtime(self.last_modification_time))
string += "metadataChangeTime : %s\n" % time.strftime('%Y-%m-%d %H:%M:%S %A',
time.localtime(self.metadata_change_time))
string += "------------------------------------------\n"
print(string) class FileObjectManager:
"""
用来扫描FileObject的类
""" def __init__(self, rootFile): self.rootFile = None if isinstance(rootFile, FileObject):
self.rootFile = rootFile def all_file_objects(self):
"""
获取扫描出来的文件
:return: 扫描文件的数组
""" filesList = [] if self.rootFile:
FileObjectManager.__get_all_files(self.rootFile, filesList) return filesList def scan_with_depth(self, depth=999999):
"""
开始扫描
:param depth: 扫描深度
:return: FileObjectManager对象本身
""" if self.rootFile: # 扫描之前清空rootFile中的数组的数据
self.rootFile.tree_file_objects = []
self.__scan_with_depth(self.rootFile, depth) return self @staticmethod
def __get_all_files(rootFile, filesList):
"""
静态方法:获取所有文件
:param rootFile: FileObject对象,作为rootFile传入
:param filesList: 集合
:return: 无
""" # 判断rootFile是否是File类型
if not isinstance(rootFile, FileObject):
assert False, 'rootFile不是FileObject类型.' if type(filesList) != list:
assert False, 'filesList不是List类型' # 遍历获取所有的文件
for tmpFile in rootFile.tree_file_objects: filesList.append(tmpFile)
if tmpFile.is_dir:
FileObjectManager.__get_all_files(tmpFile, filesList) @staticmethod
def __scan_with_depth(rootFile, depth):
"""
静态方法:递归使用的扫描方法
:param rootFile: 最为rootFile的FileObject对象
:param depth: 扫描深度
:return: 无
""" # 如果扫描等级超过了depth,则不扫描了
if rootFile.scan_depth >= depth:
return # 如果rootFile是文件夹
if rootFile.is_dir: # 获取当前文件夹下的所有子文件
filePathList = os.listdir(rootFile.file_path) # 遍历文件并创建文件夹
for fileName in filePathList: # 创建FileObject对象
file = FileObject(os.path.join(rootFile.file_path, fileName)) # 设置扫描深度
file.scan_depth = rootFile.scan_depth + 1 # 将此文件添加到rootFile的treeFileObjects中
rootFile.tree_file_objects.append(file) # 如果这个文件也是文件夹,则递归调用
if file.is_dir:
FileObjectManager.__scan_with_depth(file, depth)

使用

from file_manager import *

# 给定文件夹路径
filesList = FileObjectManager(FileObject("/Users/YouXianMing/Desktop")).scan_with_depth(3).all_file_objects() # 拼接路径数组
filesString = ""
for file in filesList: # 如果是文件,则打印
if file.is_file:
print(file.file_path)

[Python] 文件扫描的更多相关文章

  1. Linux下Python 文件内容替换脚本

    Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...

  2. 【Python文件处理】递归批处理文件夹子目录内所有txt数据

    因为有个需求,需要处理文件夹内所有txt文件,将txt里面的数据筛选,重新存储. 虽然手工可以做,但想到了python一直主张的是自动化测试,就想试着写一个自动化处理数据的程序. 一.分析数据格式 需 ...

  3. Python文件使用“wb”方式打开,写入内容

    Python文件使用"wb"方式打开,写入字符串会报错,因为这种打开方式为:以二进制格式打开一个文件只用于写入.如果该文件已存在则将其覆盖.如果该文件不存在,创建新文件. 所以写入 ...

  4. Python 文件操作函数

    这个博客是 Building powerful image classification models using very little data 的前期准备,用于把图片数据按照教程指示放到规定的文 ...

  5. python文件I/O(转)

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  6. python 文件操作总结

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  7. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  8. android媒体文件扫描

    项目中可能有这样的需求:下载或导入.导出的图片.音乐等媒体文件,需要马上能在图库或本地视屏播放器中显示出来,或者要能在媒体数据库中查询到媒体文件的相关信息,这时我们就得主动通知系统扫描新的媒体文件了. ...

  9. python文件和元组

    python文件操作 相较于java,Python里的文件操作简单了很多 python 获取当前文件所在的文件夹: os.path.dirname(__file__) 写了一个工具类,用来在当前文件夹 ...

随机推荐

  1. vue系列之webstrom的设置

    1.安装vue插件,方法 Setting->Plugins,点击Plugins,在右边输入vue,找到相应插件,然后安装 2.创建vue模板 注意红圈里面的 3.设置vue文件支持的样式 注意: ...

  2. citySelect省市区jQuery联动插件

    参考地址:http://blog.csdn.net/qq_33556185/article/details/50704446 参考地址:http://www.lanrenzhijia.com/jque ...

  3. 多CPU,多核,多进程,多线程

    当面临这些问题的时候,有两个关键词无法绕开,那就是并行和并发. 首先,要先了解几个概念: 1.进程是程序的一次执行. 2.进程是资源分配的基本单位(调度单位). 3.一个进程可以包括多个线程. 4.在 ...

  4. Python3-RabbitMQ 3.7.2学习——环境搭建(一)

    学习消息队列,就要把环境先装好,本人使用的是python3.5.2和RabbitMQ 3.7.2,在装RabbitMQ之前,先要装Erlang,一定要. 1.环境:win10系统    python3 ...

  5. python 全栈开发,Day35(TCP协议 粘包现象 和解决方案)

    一.TCP协议 粘包现象 和解决方案 黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd)执行远程命令的模块 需要用到模块subprocess sub ...

  6. 2017-2018-2 20155225《网络对抗技术》实验九 Web安全基础

    2017-2018-2 20155225<网络对抗技术>实验九 Web安全基础 WebGoat 1.String SQL Injection 题目是想办法得到数据库所有人的信用卡号,用Sm ...

  7. 《剑指offer》-铺地砖方案数

    我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 又是斐波那契...稍微变形一下. class Solution { pub ...

  8. Windows10 Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%

    相信很多人跟我一样总被Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%困扰,Compatibility Telemetry翻译过来就是“微软兼 ...

  9. 诡异的楼梯 HDU1180

    这题做了很久 做好了感觉很简单... 现在做题思路更加清晰了 一个要点就是   当楼梯过不去的时候不能是先过去时间加2  必须得回去等一秒   否则queue的时间顺序会被打破 #include< ...

  10. 045 介绍UDF,以及完成大小写的转换

    一:概述 1.UDF 用户自定义函数,用java实现自定义的需求 User Defined Function-----UDF. 2.UDF的类型 udf:一进一出 udaf:多进一出 udtf:一进多 ...