""" 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资源。)
