""" sb3extract.py scratch3.0的sb3项目文件素材提取器 本程序用来提取scratch3.0版本的项目文件里的资源。sb3文件是zip档,用winrar等工具解压后的资源以MD5值为文件名。 不方便区分造型先后顺序,对形成序列帧不友好。本程序首先解压sb3文件,再读取project.json文件,根据文件名,索引号,造型名称,文件格式,形成新的文件名。 程序设计为命令行的方式,可以用各种编程语言设计GUI程序方便地调用。 最简单的用法就是把本程序放在需要提取的sb3文件们同一个文件夹,双击它即可。""" __author__ = '李兴球' __date__ = '2019/1/13' __company__ = '风火轮少儿编程' import os import re import sys import json import shutil import zipfile def pure_string(filename): table = ("\\","/","*","?","<",">","|",".") for char in table: filename = filename.replace(char,'') return filename def extractzip(filename): """试图解压缩filename,成功则返回True""" projectfile = "" folder = os.path.splitext(filename)[0] folder = folder.replace(".","") folder = folder.strip() try: fp = zipfile.ZipFile(filename) fp.extractall(path=folder) fp.close() projectfile = folder + os.sep + "project.json" return folder,os.path.exists(projectfile) except: return folder,False def process_name(sb3file): pass def bat_process_name(sb3filelist): """遍历所有sb3文件""" amounts = len(sb3filelist) counter = 0 for sb3file in sb3filelist: try: counter += process_name(sb3file) except: pass print("共有:",amounts,"个文件,成功处理了:",counter,"个。") input("done! 作者:" + __author__ + "@" + __date__) def analyse(parameters): """分析命令行参数列表""" sb3files = [] if not ("-sb3" in parameters or "-path" in parameters): # sb3extract sb3file1 sb3file2 ... #print("在参数中没有-sb3也没有-path") return parameters if "-sb3" in parameters: pass pathindex = parameters.index("-path") path = parameters[pathindex+1] # 在-path后没写目录名可能会让程序崩溃 for file in os.listdir(path): if os.path.splitext(file)[-1] == '.sb3': sb3files.append(path + os.sep + file) sb3files.extend(parameters[1:pathindex]) # 把-path前面的sb3filename加到列表(如果有的话) try: sb3files.extend(parameters[pathindex+2:]) # 把-path后面的sb3filename加到列表(如果有的话) except: pass return sb3files if __name__ == "__main__": p = sys.argv if len(p) == 1: print("本程序提取scratch3项目素材,以可读性好的文件名呈现出来。\n") print("用法如下:") print("sb3extract # 处理当前目录下sb3文件们(双击本程序)") print("sb3extract file1 file2 .. # 指定文件们处理") print("sb3extract file1 file2 ..-path dir # 指定文件们与文件夹" ) print("sb3extract -sb3 file1 file2 .. # 指定文件们") print("sb3extract -sb3 file1 file2 ..-path dir # 指定文件们与文件夹") print("sb3extract -path dir # 只指定文件夹") print("sb3extract -path dir file1 file2.. # 指定文件夹和文件们") print("sb3extract -path dir -sb3 file1 file2.. # 指定文件夹与文件们\n") print("说明:-sb3参数后面是以空格隔开的sb3文件名,-path参数后面是路径名,不输入-sb3和-path,则认为都是sb3文件。") print("程序会把指定目录下的sb3文件和指定的sb3文件们合并到一个列表,然后逐个处理。开始处理:\n") sb3files = [filename for filename in os.listdir() if os.path.splitext(filename)[-1] == '.sb3'] else: parameters = p[1:] sb3files = analyse(parameters) #print(sb3files) bat_process_name(sb3files) """打包方式:pyinstaller -F sb3extract.py"""
如需要下载完整源代码及素材,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)
发表评论