[in]失败后停止【值/表达式】True
[in]文件路径【变量 临时Python脚本位置】C:\Users\Y\AppData\Local\Temp\quicker_8d9aef75-c418-4749-8a2c-7f8d503459b3.py
[in]内容【值/表达式】import sys\r\n
import re\r\n
from datetime import datetime\r\n
from os import path\r\n
import json\r\n
from pprint import pprint\r\n
\r\n
输入文件 = sys.argv[1]\r\n
# 输入文件 = r"D:/(20210512-091500)大类-大类2-标题(v1.1.1)#标签1#标签2@人物1@人物2=&评论.jpg"\r\n
# 输入文件 = r"D:/(2021-05-12)大类-大类2-标题(v1.1.1)#标签1#标签2@人物1@人物2=&评论.jpg"\r\n
# 输入文件 = r"D:/img(2021-05)大类-大类2-标题(v1.1.1)#标签1#标签2@人物1@人物2=&评论.jpg"\r\n
# 输入文件 = r"1111标题(v1.1.1.beta)#标签1#标签2@人物1@人物2&评论.jpg"\r\n
# 输入文件 = r"20211025-102501__OPPO-Giant__Proj1.S1.Rn4D.4k60.sLog3__BTS__Li.mov"\r\n
# 输入文件 = r"d:/mmexport1111416781651.mov"\r\n
# 输入文件 = r"20211025-102501__Proj1.S1.Rn4D.4k60.sLog3__Li.mov"\r\n
# 输入文件 = r"2021-10-25__Proj1.S1.Rn4D.4k60.sLog3.mov"\r\n
文件名 = path.basename(输入文件) \r\n
文件名无后缀 = path.splitext(文件名)[0] if path.isfile(输入文件) else 文件名\r\n
\r\n
\r\n
def 解析严格标准名字(文件无后缀名字):\r\n
'''\r\n
由于块间分隔符相同,无法分辨出哪个是标签,哪个是人物,只能返回李模糊匹配的字典:\r\n
{\r\n
'文本块': ['前缀', '标题', '标签', '人物', '评论'],\r\n
'时间': datetime.datetime(2021, 10, 25, 10, 25, 1),\r\n
'版本': ''\r\n
}\r\n
'''\r\n
\r\n
组1 = f'(?:[^\d]*)[^\d]?[\d\-_]*\)?' # 时间\r\n
组2 = r'[^_]+_*' # 前缀\r\n
组3 = r'[^_]+_*' # 标题\r\n
组4 = r'v[^_]+_*' # 版本\r\n
组5 = r'[^_]+_*' # 标签\r\n
组6 = r'[^_]+_*' # 人物\r\n
组7 = r'[^_]+_*' # 评论\r\n
\r\n
标准名字匹配结果 = re.match(\r\n
f'({组1})?({组2})?({组3})?({组4})?({组5})?({组6})?({组7})?', 文件无后缀名字)\r\n
\r\n
非时间数据块列表 = [标准名字匹配结果.group(i).strip('_') \\r\n
for i in [2, 3, 5, 6, 7] \\r\n
if 标准名字匹配结果.group(i)]\r\n
\r\n
时间 = 从字符串得到时间(标准名字匹配结果.group(1)) if 标准名字匹配结果.group(1) else ''\r\n
版本 = 标准名字匹配结果.group(4) if 标准名字匹配结果.group(4) else ''\r\n
\r\n
结果 = {'时间': 时间, '版本': 版本, '文本块': 非时间数据块列表}\r\n
\r\n
return 结果\r\n
\r\n
def 解析宽松标准名字(文件无后缀名字):\r\n
\r\n
组1 = '(?:[^\d]*)[^\d]?[\d\-_]{4,}\)?' # 时间\r\n
组2 = r'[^\(#@&]+-' # 前缀\r\n
组3 = r'[^\(#@&]+' # 标题\r\n
组4 = r'\([^#@&]+\)' # 版本\r\n
组5 = r'#[^@&]+' # 标签\r\n
组6 = r'@[^&]+' # 人物\r\n
组7 = r'&.+' # 评论\r\n
\r\n
标准名字匹配结果 = re.match(\r\n
f'({组1})?({组2})?({组3})?({组4})?({组5})?({组6})?({组7})?', 文件无后缀名字)\r\n
\r\n
时间 = 标准名字匹配结果.group(1) if 标准名字匹配结果.group(1) else ''\r\n
前缀 = 标准名字匹配结果.group(2) if 标准名字匹配结果.group(2) else ''\r\n
标题 = 标准名字匹配结果.group(3) if 标准名字匹配结果.group(3) else ''\r\n
版本 = 标准名字匹配结果.group(4) if 标准名字匹配结果.group(4) else ''\r\n
标签 = 标准名字匹配结果.group(5) if 标准名字匹配结果.group(5) else ''\r\n
人物 = 标准名字匹配结果.group(6) if 标准名字匹配结果.group(6) else ''\r\n
评论 = 标准名字匹配结果.group(7) if 标准名字匹配结果.group(7) else ''\r\n
\r\n
时间 = 从字符串得到时间(时间)\r\n
时间 = 时间 if 时间 else ''\r\n
前缀 = 前缀.strip('-')\r\n
版本 = 版本.strip('()')\r\n
标签 = 标签.replace('#', '\r\n#').lstrip()\r\n
人物 = 人物.replace('@', '\r\n@').lstrip()\r\n
评论 = 评论.replace('&', '\r\n').lstrip()\r\n
\r\n
if not 时间 and not 前缀 and not 版本 and not 标签 and not 人物 and not 评论:\r\n
标题 = 文件无后缀名字\r\n
\r\n
结果 = {'文件名时间': 时间, \r\n
'前缀': 前缀, '标题': 标题, \r\n
'版本': 版本, \r\n
'标签': 标签, '人物': 人物, '评论': 评论}\r\n
\r\n
return 结果\r\n
\r\n
def 从字符串得到时间(字符串):\r\n
全数字 = ''.join(re.findall(r'\d+', 字符串))\r\n
当前时间 = datetime.now()\r\n
\r\n
try:\r\n
# 年月日时分秒\r\n
时间 = datetime.fromisoformat(\r\n
f'{全数字[0:4]}-{全数字[4:6]}-{全数字[6:8]} {全数字[8:10]}:{全数字[10:12]}:{全数字[12:14]}'\r\n
)\r\n
return f'{时间.year}{时间.month}{时间.day}-{时间.hour}{时间.minute}{时间.second}'\r\n
except:\r\n
...\r\n
try:\r\n
# 年月日\r\n
if len(全数字) == 8:\r\n
时间 = datetime.fromisoformat(\r\n
f'{全数字[0:4]}-{全数字[4:6]}-{全数字[6:8]} 00:00:00'\r\n
)\r\n
return f'{时间.year}-{时间.month}-{时间.day}'\r\n
except:\r\n
...\r\n
try:\r\n
# 年月\r\n
if len(全数字) == 6:\r\n
时间 = datetime.fromisoformat(\r\n
f'{全数字[0:4]}-{全数字[4:6]}-01 00:00:00'\r\n
)\r\n
return f'{时间.year}-{时间.month}'\r\n
except:\r\n
...\r\n
try:\r\n
# 年\r\n
if len(全数字) == 4:\r\n
时间 = datetime.fromisoformat(\r\n
f'{全数字[0:4]}-01-01 00:00:00'\r\n
)\r\n
return f'{时间.year}'\r\n
except:\r\n
...\r\n
\r\n
\r\n
try:\r\n
# 类似 mmexport1111467816512.jpg\r\n
if re.match(r'.*[^\d]?(\d{13})([^\d]+)?', 文件名):\r\n
时间 = datetime.fromtimestamp(\r\n
int(全数字[0:13]) / 1000\r\n
)\r\n
return f'{时间.year}{时间.month}{时间.day}-{时间.hour}{时间.minute}{时间.second}'\r\n
except:\r\n
...\r\n
\r\n
try:\r\n
# 类似 121301190818c8f0c7010755.mp4\r\n
时间 = datetime.fromisoformat(\r\n
f'20{全数字[10:12]}-{全数字[8:10]}-{全数字[6:8]} {全数字[4:6]}:{全数字[2:4]}:{全数字[0:2]}').timestamp()\r\n
return f'{时间.year}{时间.month}{时间.day}-{时间.hour}{时间.minute}{时间.second}'\r\n
except:\r\n
...\r\n
\r\n
return False\r\n
\r\n
if __name__ == '__main__':\r\n
\r\n
# 结果 = 解析严格标准名字(文件名无后缀)\r\n
结果 = 解析宽松标准名字(文件名无后缀)\r\n
\r\n
结果 = json.dumps(结果, ensure_ascii=True)\r\n
\r\n
print(结果)\r\n
[in]文件编码【值/表达式】utf-8
[in]添加到文件末尾【值/表达式】False
[in]添加空行【值/表达式】False
[in]添加UTF-BOM【值/表达式】False