文件扫描

下载

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. Android设计模式-观察者模式

    原文地址 http://blog.csdn.net/qq_25806863/article/details/69218968 观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统. ...

  2. typeof引发的思考

    今天在群里看到一位网友提问:var status=1; typeof status 结果输出什么 我会心一笑  ,这尼玛这么简单,一看就是‘number’,结果网友说不是number,而是string ...

  3. PHP 迭代器和生成器

    迭代和迭代器 迭代是指反复执行一个过程,每执行一次叫做迭代一次.比如普通的遍历便是迭代: $arr = [1, 2, 3, 4, 5];foreach($arr as $key => $valu ...

  4. php中0,空,null和false之间区别

    $a = 0; $b="0"; $c= ''; $d= null; $e = false; echo "5个变量-原始测试类型"; var_dump($a);/ ...

  5. AC自动机(trie图版)

    AC自动机是一个多模字符串匹配的自动机(网上说的),主要作用是在一个长串中同时进行多个字符串的匹配 基础芝士: trie树(字典树) 烤馍片kmp单模字符串匹配 如果不会的建议去网上学一下(本篇讲解略 ...

  6. 第一个Struts2实例之hello world!

    Struts官网:http://struts.apache.org/ Struts2框架预先实现了一些功能    1:请求数据自动封装    2:文件上传的功能    3:对国际化功能的简化    4 ...

  7. 【AtCoder】全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019

    感觉最近好颓,以后不能这么颓了,要省选了,争取省选之前再板刷一面ATC??? A - Subscribers 简单容斥 #include <bits/stdc++.h> #define f ...

  8. C#: 执行批处理文件(*.bat)的方法

    static void Main(string[] args) { Process proc = null; try { proc = new Process(); proc.StartInfo.Fi ...

  9. Jackson ObjectMapper readValue过程

    1.整体调用栈 2.看一下调用栈的两个方法 resolve 方法中通过 Iterator i$ = this._beanProperties.iterator() 遍历属性的所有子属性,缓存对应的 d ...

  10. 使用windows脚本移动文件

    1. 移动脚本 在部署web项目时,一般需要将打包的war包发布到Tomcat目录下,所以自己就在网上查找资料写了一个简略的移动文件的脚本,如下: @echo off echo "使用bat ...