使用Python进行编码转换

本文介绍了一个简单的Python脚本,用于将指定文件或目录下所有文件的编码从一种格式转换为另一种格式。该脚本首先定义了一个转换函数,然后定义了一个用于遍历目录并应用转换的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先import os,sys

import os,sys  

定义一个函数

def convert( filename, in_enc = "UTF8", out_enc="GBK" ):`

第一个参数是需要装换的文件名,第二个是源文件的原编码,第三个是需要转为目标编码。第二个、第三个参数都有默认值。

def convert( filename, in_enc = "UTF8", out_enc="GBK" ):  
    try:  
        print "convert " + filename,        
        #读取文件内容 
        content = open(filename).read() 
        #将原文件内容进行编码得到新文件内容
        new_content = content.decode(in_enc).encode(out_enc) 
        #打开文件将新文件内容写进去 
        open(filename, 'w').write(new_content)  
        print " done"  
    except:  
        print " error"

以上这个方法针对的文件名,但如果只输入了目录,又要查找目录下的所有文件,所以就再定义一个方法。

def explore(dir): 
#遍历目录的所有文件 并将根目录 存在变量root中,目录名存于dirs中,文件名存于files中
    for root, dirs, files in os.walk(dir):  
    #再次遍历所有文件名files
        for file in files:  
        #将文件名与根目录进行拼接  形成绝对路径
            path = os.path.join(root, file)  
            #调用上面编码转换函数
            convert(path)

最后在main函数中判断是否输入的是文件名还是目录

def main():
#获取命令行的第一个参数  
    for path in sys.argv[1:]:  
    #如果是文件 则调用单个文件编码转换
        if os.path.isfile(path):  
            convert(path) 
            #否则就调用 explore方法
        elif os.path.isdir(path):  
            explore(path)

完整源码如下:

import os,sys  

def convert( filename, in_enc = "UTF8", out_enc="GBK" ):  
    try:  
        print "convert " + filename,  
        content = open(filename).read()  
        new_content = content.decode(in_enc).encode(out_enc)  
        open(filename, 'w').write(new_content)  
        print " done"  
    except:  
        print " error"  

def explore(dir):  
    for root, dirs, files in os.walk(dir):  
        for file in files:  
            path = os.path.join(root, file)  
            convert(path)  

def main():  
    for path in sys.argv[1:]:  
        if os.path.isfile(path):  
            convert(path)  
        elif os.path.isdir(path):  
            explore(path)  

if __name__ == "__main__":  
    main() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甄齐才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值