提交 92c747fd 编写于 作者: Z zong.xiangrui

version 0.21.0.1 update

优化标签类封装逻辑,关闭文件前一直占用文件。新增常用工具函数,直接对标签进行增加、删除、清空、查询。新增依赖说明requirements.txt。
上级 6edec071
from com.tagdox.cores.FileTags import FileTags
__all__ = [
"FileTags"
]
\ No newline at end of file
# -*- coding: utf-8 -*-
from typing import Set
from typing import Set, TextIO
import os
import logging
from time import sleep
class FileTags:
__raw_file: bytes
__tags: Set[str]
__filename: str
__filestream: TextIO
def __init__(self, filename: str):
"""
......@@ -14,14 +16,8 @@ class FileTags:
:param filename: 文件名
:return 空
"""
with open(filename, "rb") as f:
self.__raw_file = f.read()
try:
with open(filename + ":tags", "r", encoding="utf8") as f:
self.__tags = set(list(map(lambda x: x.strip(), f.readlines())))
except FileNotFoundError as e:
self.__tags = set()
self.__filename = filename
self.__open_tags()
def __str__(self):
"""
......@@ -29,48 +25,65 @@ class FileTags:
"""
return "filename: %s\ntags: %s" % (self.__filename, self.__tags)
def __enter__(self):
"""
允许使用with语句\n
"""
self.__open_tags()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""
允许使用with语句\n
"""
self.close()
def __open_tags(self):
"""
打开标签\n
"""
logging.debug("打开文件标签" + self.__filename)
try:
self.__filestream = open(self.__filename + ":tags", "r+", encoding="utf8")
self.__tags = set(list(map(lambda x: x.strip(), self.__filestream.readlines())))
except FileNotFoundError as e:
self.__filestream = open(self.__filename + ":tags", "w", encoding="utf8")
self.__tags = set()
def add_tag(self, tag_name: str) -> None:
"""
:param tag_name: 标签名
:return 空
"""
self.__tags.add(tag_name)
if len(tag_name) > 0:
self.__tags.add(tag_name)
else:
logging.warning("文件%s新建标签不能为空" % self.__filename)
def remove_tag(self, tag_name: str) -> None:
"""
:param tag_name: 标签名
:return 空
"""
self.__tags.remove(tag_name)
if tag_name in self.__tags:
self.__tags.remove(tag_name)
else:
logging.warning("文件%s没有标签%s" % (self.__filename, tag_name))
def clear_tags(self):
"""
清除标签信息\n
"""
try:
os.remove(self.__filename + ":tags")
except FileNotFoundError as e:
pass
def show_tags(self) -> None:
"""
显示标签\n
"""
print(self.__tags)
self.__tags.clear()
def save_tags(self):
"""
保存标签\n
"""
with open(self.__filename + ":tags", "w", encoding="utf8") as f:
f.writelines(list(map(lambda x: x + "\n", self.__tags)))
def save_rawfile(self):
"""
保存文件字节\n
"""
with open(self.__filename, "wb") as f:
f.write(self.__raw_file)
self.__filestream.seek(0)
self.__filestream.truncate()
if len(self.__tags) > 0:
self.__filestream.writelines(list(map(lambda x: x + "\n", self.__tags)))
def get_tags(self) -> Set[str]:
"""
......@@ -82,15 +95,20 @@ class FileTags:
"""
关闭文件\n
"""
self.save_rawfile()
self.save_tags()
logging.debug("关闭文件标签" + self.__filename)
self.__filestream.close()
if len(self.__tags) == 0:
os.remove(self.__filename + ":tags")
sleep(0.01) # 调用系统api删除文件是异步操作
if __name__ == '__main__':
file = FileTags(filename="../../../src/img.png")
file = FileTags(filename="./src/img.png")
# file.add_tag("picture")
# file.add_tag("icons")
# file.add_tag("test")
# file.save_tags()
file.show_tags()
# file.clear_tags()
file.close()
# -*- coding: utf-8 -*-
from com.tagdox.cores.FileTags import FileTags
from typing import Set
def get_tags(filename: str) -> Set[str]:
"""
获取文件标签\n
:param filename: 文件路径
:return: 标签字典
"""
with FileTags(filename) as f:
return f.get_tags()
def add_tag(filename: str, tag: str) -> None:
"""
增加标签\n
:param filename: 文件路径
:param tag: 标签名
:return: 空
"""
with FileTags(filename) as f:
f.add_tag(tag)
def remove_tag(filename: str, tag: str) -> None:
"""
删除标签\n
:param filename: 文件路径
:param tag: 标签名
:return: 空
"""
with FileTags(filename) as f:
f.remove_tag(tag)
def clear_tags(filename: str) -> None:
"""
清除标签\n
:param filename: 文件路径
:return: 空
"""
with FileTags(filename) as f:
f.clear_tags()
if __name__ == '__main__':
clear_tags("./src/img.png")
# add_tag("./src/img.png", "test")
# add_tag("./src/img.png", "tag")
# print(get_tags("./src/img.png"))
# remove_tag("./src/img.png", "test")
print(get_tags("./src/img.png"))
\ No newline at end of file
from com.tagdox.utils.TagOps import get_tags, clear_tags, add_tag, remove_tag
__all__ = [
"get_tags",
"clear_tags",
"add_tag",
"remove_tag"
]
future~=0.18.2
windnd~=1.0.7
\ No newline at end of file
......@@ -9,6 +9,10 @@
## 更新记录
#### v0.21.0.1 2021年10月4日
优化标签类封装逻辑,关闭文件前一直占用文件。<br />
新增常用工具函数,直接对标签进行增加、删除、清空、查询。<br />
新增依赖说明requirements.txt。<br />
#### v0.21.0.0 2021年10月3日
优化标签逻辑,采用NTFS流模式,不再影响文件名(测试版)。
优化右键响应,现在可以正确在被点击的项目处出现右键菜单了。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册