最近喜欢上了Python脚本,确实方便。因为需要考试,而备考材料是个被制作成了SWF格式的Word文件,于是我用 Flash Decompiler Trillix intro反编译(该软件做的不是很好,若是针对特定文件类型进行反编译效果会更好)后得到100多个零碎的txt,每个txt就才几段话,我就打算用Python合并为一个txt。
源代码(Python2.7):
# -*- coding: cp936 -*-
#!/usr/bin/env python
import os
import codecs
#小文件的目录
path = "c:\pTest\Texts"
#最终文件
goal = codecs.open('all.txt','w','utf-8')
for root,dirs,files in os.walk(path):
#print("files: ", files)
for name in files:
#原文件是utf16,不加会乱码
eachfile = codecs.open(path+'\\'+name,'r', 'utf-16_le')
#print eachfile
while True:
s = eachfile.read(16*1024)
if not s:
break
goal.write(s)
eachfile.close()
goal.close()
遇到的问题
- 合并后的文件打开一看,出现乱码。然后我用 Sublime Text 打开那些小txt一看,居然是 UTF-16 LE with BOM,怪不得乱码。然后参考下面的参考文章,使用Python的编码格式转换库 codecs 来打开指定编码格式的文件,这样就没有出错了。
- 打开文件需要指定 utf-16-le 格式,被写入的文件也需要指定打开格式 utf-8,否则在Windows 系统中,因为被写入文件 all.txt 默认是 ASCII 格式编码不能支持 汉字而报错。
- 貌似Python 对编码格式 字符串
utf-16_le
还是utf_16_le
没有严格限制。
参考
- 文件编码格式:Python的codecs模块
python读取Unicode和ANSI编码的文件 代码 - 遍历目录读写文件:python 多个txt文件合并成一个txt文件
其他
待写 Python 关闭当前指定标题的窗口程序。