初次写python应用,比较简单的转换文件编码,用来将文件转换到指定编码,主要利用了 open 文件操作,os 目录遍历,chardet
编码探测,解决 movist(多字幕播放器)
只能正确读取utf-8字幕文件问题,一次将目录下所有字幕都转换城utf-8编码.
ps:发现使用多线程后,时间反而会上升一倍,看来对于小任务线程还是开销比较大的
/Users/yiminghe/code/python/tools/encode.py :
# -*- coding: utf-8 -*-
import sys,os,shutil,traceback,time
from chardet.universaldetector import UniversalDetector
#deal with chinese
encodes={
"gb2312":"gb18030",
"gbk":"gb18030"
}
class HeEncodingEx(Exception):
def __init__(self,msg):
Exception.__init__(self,msg);
def gb(encoding):
if encoding is None:
raise HeEncodingEx,"unknown encoding"
encoding=encoding.strip().lower()
return encodes[encoding] if encoding in encodes else encoding
def transferToEncoding(filename,toCode):
'''
save the content of filename to filename with toCode text encoding
@param filename{string}: text file
@param toCode{string}: text encoding code ,gbk,utf-8...etc
@return{boolean}: operation success true/false
'''
if(os.path.isdir(filename)):
print "error:not file"
return False
try:
detector = UniversalDetector()
#print filename
#read content
f=open(filename,"r")
ls=f.readlines();
f.close();
#detect encoding
for l in ls:
detector.feed(l)
if detector.done: break
detector.close()
#print detector.result
#print dir(detector.result)
encode=gb(detector.result['encoding'])
#print "original encoding:",encode
if(encode.lower() != toCode.lower()):
#backup orginal file
if not os.path.exists(filename+".bak"):
shutil.copy(filename, filename+".bak")
#save to another encoding
f=open(filename,"w")
for l in ls:
f.write(unicode(l,encode).encode(toCode))
f.close()
#print "result encoding:"+toCode
else:
pass
#print "same encoding"
except BaseException,e:
#print "error:",e
traceback.print_exc()
#restore
if(os.path.exists(filename+".bak")):
shutil.copy(filename+".bak", filename)
return False
finally:
print
print
return True
#main
if __name__=="__main__":
start=time.time()
if len(sys.argv)<2:
print "erro argv! filename toCoding"
sys.exit(1)
#default transfer to utf-8
toCode=sys.argv[2] if len(sys.argv) > 2 else "utf-8"
filename=sys.argv[1]
if(os.path.isfile(filename)):
transferToEncoding(filename,toCode)
else:
import threading
#同时10个线程处理文件
THREAD_NUM=10
lock=threading._allocate_lock()
def fetchAndProcess(files,func):
'''
每次取一个元素运行
@param files{Array}:数据存放数组
@param func{Function}:处理函数
'''
while len(files):
lock.acquire()
if len(files)==0:
break
try:
file_=files.pop()
except IndexError,e:
print e
break
print threading.current_thread().ident," got : ",file_
lock.release()
func(file_,toCode)
#folder? then walk
all_files=[]
for base,folders,files in os.walk(filename):
if not base.endswith(os.sep) :
base+=os.sep
for file_ in files:
if file_.lower().endswith("srt"):
all_files.append(base+file_)
if 0:
transferToEncoding(base+file_,toCode)
if 1:
num=THREAD_NUM
threads=[];
#print all_files;
while num:
num-=1
threads.append(threading.Thread(target=fetchAndProcess,args=(all_files,transferToEncoding)))
for thread_ in threads:
thread_.start()
for thread_ in threads:
thread_.join()
#10,20,30个线程 40。6秒
#单线程 28.1秒
print "consume time :",time.time()-start
/Users/yiminghe/code/python/tools/
he_encode.sh:
#!/bin/bash -
#"$@" ,not $* ,$@,"$*"
python /Users/yiminghe/code/python/tools/encode.py "$@"
创建软链接
chmod 777 /Users/yiminghe/code/python/tools/he_encode.sh
ln -s /Users/yiminghe/code/python/tools/he_encode.sh /usr/bin
运行:
定位在某个目录下运即可:转换目录下的所有字幕文件为utf-8格式
he_encode .
分享到:
相关推荐
将整个图像文件夹转换成Python代码 转换一个完整的文件夹 放入一个完整的文件 跑步 当您运行该程序时,您将看到此窗口。 您可以粘贴图像文件夹的路径,也可以使用“浏览”按钮找到该文件夹。 输入后,单击...
3D LUT 本质上是立方体形状的网格(因此 Adobe 使用.cube其 LUT 文件扩展名)。为了编码完整的 8 位 RGB 空间的无损变换,需要 256x256x256 映射。但是,Cube 格式允许对 LUT 中的值进行插值,该 L
图片到base64编码的字符串批量转换器。 加快CSS开发速度,使用base64编码图片准备背景图像属性。 特点: 允许批量转换在给定路径下找到的图片,并在CSS或CSV中打包base64编码的字符串 支持png,jpg,gif(还包括...
主要针对 Python2.7.x 3.x、PyQt4.x 5.x、PySide1.2.x 2.x 代码开发流程进行优化,譬如:高效编写、重构,批量修改、自动化版本管理,还集成了很多文件处理、间接排版、编码转换、语音助理等 "小程序" 。 应用还对...
Python在数据分析和处理方面具有广泛的应用,下面是对这个过程的描述: 数据获取:首先,需要获取要分析和处理的数据。这可以包括从数据库、文件(如CSV、Excel等)、API接口或网络爬取等方式获取数据。 数据清洗...
05 进制转换 06 原码补码反码 07 物理层和数据链路层 08 网络层和arp协议 09 传输层和应用层 第2章 01 上节课复习 02 arp协议复习 03 字符编码 第3章 01 网络基础和dos命令 02 为何学习linux 03 课程内容介绍 04...
您将此客户端包含在您的应用程序中,以便它可以轻松地与外部编辑器对话或播放文件中的现有关键帧数据。 硬编码这些数据是可行的,但是当达到一定的复杂性时,它会很快变得丑陋。几个关键帧数据集也可以在同一个应用...
1.1 Python 简介......................................1 1.2 安装软件包......................................2 1.2.1 Python(x,y)..................................... 2 1.2.2 Enthought Python ...
json格式数据中,需从'\uxxxx'形式的unicode_escape编码转换成u'\uxxxx'的unicode编码。 7. 自动化测试工具Selenium Selenium是一款自动化测试工具。它能实现操纵浏览器,包括字符填充、鼠标点击、获取元素、页面...
此外,您可以查看文件的音频属性(例如,编解码器,持续时间,比特率,通道模式,采样率),添加封面(嵌入式和外部)以及使用 IronPython 脚本编辑标签(例如,转换为大写字母,修剪空白) ,将首字母大写)。...
DIFF等众多文件 2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相转换 5 可以对任意的文本块进行操作,ALT键+鼠标 6 对括号{}〔〕...
工具云(ToolCloud):是一个上传、管理和运行工具以及以多种方式显示运行结果的服务平台。 ToolCloud不同于AppStore,...此工具不一定能判断准确,因为文件编码本身没有必然的途径判断。 标签:ToolCloud
字幕转换器 程序za obradu srt i txt fajlova。 要求: 3.8版 版本4.1.0或更高版本 库: , 要安装要求: 视窗: python -m pip install -r /path/to/requirements.txt Linux: pip install -r /path/to/...
• 确保不同数据源中的命名约定、编码结构、属性度量等方面的一致性 例如,宾馆价格:货币种类、税额、是否含早餐等等 – 当数据被移入数据仓库时将会被转换 数据仓库-时变的 – 数据仓库涵盖的...
Java库和命令行应用程序,用于将管道转换为PMML。 目录 附加信息 特征 概述 功能性: 受支持的Python软件包,转换器和估计器的数量是所有竞争对手的三倍! 全面收集,分析和编码特征信息: 名字 数据和操作...
项目详细信息:●用Python和PyTorch编码以生成数据的数据转换。 ●使用PyTorch的torchvision.models(vgg16和densitynet161)进行预先的传输学习,以生成和训练有关数据转换的神经网络。 ●模型在20个纪元内获得了...
使用*--list*查看支持的文件编码转换格式: utf-32le utf-32le-bom utf-32 utf-32-bom utf-32be utf-32be-bom utf-16be utf-16be-bom utf-8 utf-8-bom utf-16 utf-16-bom utf-16le utf-16le-bom gbk gb2312 big5 ....
每个帧都可以未压缩存储或存储为表示 JPEG 或 PNG 编码的一维字节数组。 此实用程序可能对那些使用需要 HDF5 格式输入的软件对图像执行批量科学计算的人有用。 执照 此实用程序是 :copyright: 版权所有 2014,Rich...
字符编码转换详解 函数与函数式编程 函数式编程之参数详解 局部变量与全局变量作用域 递归 函数式编程与函数不同 高阶函数 第4周 上节内容回顾 心灵鸡汤 装饰器详解 装饰器应用详解 装饰器之函数即变量 装饰器之高...
docx-xslt docx-xslt是一个 Python 库,用于为没有 XML 或 XSLT 编码的 Microsoft Word .docx 文件添加 XSL 转换。 该模块使用 Word元文本,该文本已使用称为XSL的特定字符模板进行格式化,添加 XSL 代码并使用 XML ...