我用 Linux爬虫专题Python五期爬虫作业

[python]转换文件编码格式

2018-09-27  本文已影响19人  羽恒

文件编码格式一直是很多人特别头疼的一件事情,最近由于跨平台开发,经常出现编码格式的问题。所以关于编码格式转换采用python的方式记录下来以便后期需要。让我们一起走进python对编码格式的操作之路

编码格式介绍

三方库文件

chardetcodecs

库文件简介

在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter类。

在处理字符串时,常常会遇到不知道字符串是何种编码,如果不知道字符串的编码就不能将字符串转换成需要的编码。面对多种不同编码的输入方式,是否会有一种有效的编码方式?chardet是一个非常优秀的编码识别模块。

代码转换实例

Main函数

import os
import sys
import codecs
import chardet
#将路径下面的所有文件,从原来的格式变为UTF-8的格式
def Main():
    path = '文件路径'
    (floders, files) = list_folders_files(path)
    for file in files:
        file_name =os.path.join(floders,file)
        with open(file_name, "rb") as f_in:
            data = f.read()
            code_type = chardet.detect(data)['encoding']
            file_convert(file_name,file, code_type, 'UTF-8')

文件转换代码

def convert(file_name,file, in_code="GBK", out_code="UTF-8"):
    """
    该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到UTF-8
    :param file:    文件路径
    :param in_code:  输入文件格式
    :param out_code: 输出文件格式
    :return:
    """
    out_path='输出文件路径'
    try:
        with codecs.open(file_name, 'r', incode) as f_in:
            new_content = f_in.read()
            f_out = codecs.open(os.path.join(out_path,file), 'w', out_code)
            f_out.write(new_content)
            f_out.close
    except IOError as err:
        print("I/O error: {0}".format(err))

获取指定文件夹下文件

import os

def list_folders_files(path):
    """
    返回 "文件夹" 和 "文件" 名字

    :param path: "文件夹"和"文件"所在的路径
    :return:  (list_folders, list_files)
            :list_folders: 文件夹
            :list_files: 文件
    """
    list_folders = []
    list_files = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            list_folders.append(file)
        else:
            list_files.append(file)
    return (list_folders, list_files)

Linux 命令行转换

iconv命令用于文件编码的转换,
碰到gbk编码的文件,需要转换成utf8,直接使用该命令即可。

命令用法

语法

iconv -f 原编码 -t 新编码 filename -o newfile

参数说明

参数 参数描述
-f from 来源编码
-t to 转换后新编码
-c 忽略无效字符
-s --silent,忽略警告
-o file 可选,没有的话直接,
转换当前文件,使用-o 保留源文件

命令实例

上一篇下一篇

猜你喜欢

热点阅读