为电影行业优化的python路径库。支持扫描序列文件,提取帧计数和许多其他有用的功能。

dayu-path的Python项目详细描述


dayu_path

Build Status

针对影视行业的文件路径处理类。比起传统的os.path 有着下面的优点:

  • 基于unipath,将文件路径作为对象处理
  • 更好的针对影视行业文件优化。可以快速得到frame count、version 等字段
  • 扫描文件自动拼合序列帧,并且可以识别丢帧
  • 更快捷的文件序列帧格式转换。支持%0?d、####、$F? 的三种形式
  • 支持用户自行对DayuPath 添加更多的方法、属性

简单用法说明

继承与unipath,因此具备所有unipath 的方法。 (unipath 的git:https://github.com/mikeorr/Unipath

fromdayu_pathimportDayuPath# 初始化disk_path=DayuPath('/some/v0001/A001C001_170922_E4FB.1001.exr')# 查询父级目录assertdisk_path.parent=='/some/v0001'# 拼接子文件夹、子文件assertdisk.path.parent.child('child','new_file.txt')=='/some/v0001/child/new_file.txt'# 获得文件名、文件扩展名、文件主干部分assertdisk_path.name=='A001C001_170922_E4FB.1001.exr'assertdisk.path.ext=='.exr'assertdisk_path.stem=='A001C001_170922_E4FB.1001'# 扫描当前目录下的所有文件夹、文件printdisk_path.parent.listdir()# 遍历当前文件夹下所有深度的文件夹、文件forsingle_fileindisk_path.parent.walk():printsingle_file# 快速获得相应的version、frame countassertdisk_path.frame==1001assertdisk_path.version=='v0001'# 快速得到文件的挂载目录(盘符、挂载点)assertdisk_path.root=='/'# 判断文件是本地文件系统,还是网络文件系统assertDayuPath('/some/local/file').is_local==TrueassertDayuPath('/some/network/file').is_network==True# 文件实际名称转换为序列帧形式assertdisk_path.to_pattern()=='/some/v0001/A001C001_170922_E4FB.%04d.exr'assertdisk_path.to_pattern('#')=='/some/v0001/A001C001_170922_E4FB.####.exr'assertdisk_path.to_pattern('$')=='/some/v0001/A001C001_170922_E4FB.$F4.exr'# 从序列帧的形式,恢复成为绝对文件路径disk_pattern=disk_path.to_pattern()assertdisk_pattern.pattern=='%04d'assertdisk_pattern.restore_pattern(1234)=='/some/v0001/A001C001_170922_E4FB.1234.exr'# 文件扫描,支持递归深度。并且将扫描的文件自动识别为序列帧的形式forsequence_fileindisk_path.scan(recursive=True):printsequence_file# SequenceFile(filename='/some/v0001/A001C001_170922_E4FB.%04d.exr'#               frames=[1001, 1002, 1003, 1004, 1006],#               missing=[1005])

DayuPathPlugin 的插件用法

如果用户需要对DayuPath 添加自定义的函数属性,除了常规的继承方法之外。还可以使用DayuPathPlugin 将自定义的方法、属性以插件的形式加入DayuPath。 这样可以更加灵活的在代码的任意地方根据需要增加、减少功能。

fromdayu_pathimportDayuPath,DayuPathPlugin# 用户自己添加的功能函数defmy_function(self,*args,**kwargs):printargs,kwargs# 增加插件函数 (实例化方法)DayuPathPlugin.register_func(my_function)DayuPath('/some/path/file').my_function(123)# (1,2,3), {}# 也可以使用装饰器来进行注册@DayuPathPlugin.register_funcdefother_function(self):return'hello world'# 增加插件属性 (类属性)DayuPathPlugin.register_attribute('my_key',default_value=100)assertDayuPath('/some/other/file').my_key==100# 取消插件函数、插件属性ret=DayuPathPlugin.unregister('my_function')assertret==Trueret=DayuPathPlugin.unregister('my_key')assertret==True

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java MongoOperations Upert/FindModify删除mongo中的所有字段   java括号中的二叉树,而!=空值无效   java com.*.*.**。安全CustomUserDetail无法强制转换为com。***。安全CustomUserDetail   java如何编写多线程算法来发现可用socket   java Spring Boot Solr:子文档的索引列表   java如何向maven shade插件添加外部jar文件   java zebra条形码扫描仪Android studio集成   java为什么一个地方的原始类型会导致其他地方的通用调用站点被视为原始类型?   java将swing控件拆分为相等的部分   java如何在jshell中为spring项目设置类路径   java关于如何从API级别19的时间选择器中删除此白边的提示?   存储二进制字符串所有可能序列的算法,Java   测试JUnitJava。lang.NullPointerException   java Google AppEngine数据库   JavaSpring如何向数据对象注入@Value?   在eclipse java项目中包含mavenant构建库   带有JSP/EL的java省略号(缩写文本)