嵌入式 web 服务器不同于传统服务器,web 需要转换成数组格式保存在 flash 中,才方便 lwip 网络接口的调用,最近因为业务需求,需要频繁修改网页,每次的压缩和转换就是个很繁琐的过程,因此我就有了利用所掌握的知识,利用 python 编写个能够批量处理网页文件,压缩并转换成数组的脚本。
脚本运行背景 (后续版本兼容):
Python 3.5.1(下载、安装、配置请参考网上教程)
node.js v4.4.7, 安装 uglifyjs 管理包,支持 js 文件非文本压缩
uglifyjs 用来压缩 JS 文件的引擎,具体安装可参考
具体实现代码如下:
上述实现的原理主要包含:
1. 遍历待处理文件夹 (路径为..\basic,需要用户创建,并将处理文件复制到其中,并将脚本放置到该文件夹上一层)--WebProcess
2. 创建压缩页面文件夹 (..\reduce, 用于存储压缩后文件), 由脚本完成,处理动作:
js:调用 uglifyjs 进行压缩处理
gif, jpg, ico 和其它: 直接进行复制处理
3. 创建处理页面文件夹 (..\program, 用于存储压缩后文件), 由脚本完成,处理动作:
以二进制模式读取文件,并转换成 16 进制字符串写入到该文件夹中
在文件夹下 (shift + 鼠标右键) 启用 windows 命令行,并输入 python web.py, 就可以通过循环重复这三个过程就可以完成所有文件的处理。
特别注意:所有处理的文件需要以 utf-8 格式存储,否则读取时会报 "gbk" 读取错误。
实现效果如下图
html 文件:
转换数组:
示例可参考:
另外附送一个小的脚本,查询当前文件夹下文件行数和空行数 (算是写这个脚本测试时衍生出来的):
- # / usr / bin / python import os total_count = 0;
- empty_count = 0;
- def CountLine(path) : global total_count global empty_count tempfile = open(path) for lines in tempfile: total_count += 1
- if len(lines.strip()) == 0 : empty_count += 1
- def TotalLine(path) : for root,
- dirs,
- files in os.walk(path) : for item in files: ext = item.split('.') ext = ext[ - 1]
- if (ext in ["cpp", "c", "h", "java", "php"]) : subpath = root + "/" + item CountLine(subpath) path = os.path.split(os.path.realpath(__file__))[0];
- TotalLine(path) print("Input Path:", path) print("total lines: ", total_count) print("empty lines: ", empty_count) print("code lines: ", (total_count - empty_count))
来源: http://www.cnblogs.com/zc110747/p/6160813.html