使用python的chardet库获得文件编码并修改编码

yipeiwu_com5年前Python基础

首先需要安装chardet库,有很多方式,我才用的是比较笨的方式:sudo pip install chardet

复制代码 代码如下:

#!/usr/bin/env python
# coding: UTF-8
import sys
import os
import chardet

 
def print_usage():
  print '''usage:
  change_charset [file|directory] [charset] [output file]\n
  for example:
    change 1.txt utf-8 n1.txt
    change 1.txt utf-8
    change . utf-8
    change 1.txt
'''
def get_charset(s):
  return chardet.detect(s)['encoding']

 
def remove(file_name):
  os.remove(file_name)

 
def change_file_charset(file_name, output_file_name, charset):
  f = open(file_name)
  s = f.read()
  f.close()

  if file_name == output_file_name or output_file_name == "":
    remove(file_name)

  old_charset = get_charset(s)
  u = s.decode(old_charset)

  if output_file_name == "":
    output_file_name = file_name
  f = open(output_file_name, 'w')
  s = u.encode(charset)
  f.write(s)
  f.close()

 
def do(file_name, output_file_name, charset):
  if os.path.isdir(file_name):
    for item in os.listdir(file_name):
      try:
        if os.path.isdir(file_name+"/"+item):
          do(file_name+"/"+item, "", charset)
        else:
          change_file_charset(file_name+"/"+item, "", charset)
      except OSError, e:
        print e
  else:
    change_file_charset(file_name, output_file_name, charset)

 
if __name__ == '__main__':
  length = len(sys.argv)

  if length == 1:
    print_usage()
  elif length == 2:
    do(sys.argv[1], "", "utf-8")
  elif length == 3:
    do(sys.argv[1], "", sys.argv[2])
  elif length == 4:
    do(sys.argv[1], sys.argv[3], sys.argv[2])
  else:
    print_usage()

相关文章

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

Tensorflow 自带可视化Tensorboard使用方法(附项目代码)

Tensorboard: 如何更直观的观察数据在神经网络中的变化,或是已经构建的神经网络的结构。上一篇文章说到,可以使用matplotlib第三方可视化,来进行一定程度上的可视化。然而T...

python sys模块sys.path使用方法示例

python sys模块包含了与python解释器和它的环境有关的函数,这个你可以通过dir(sys)来查看他里面的方法和成员属性 复制代码 代码如下:import sysprint d...

python 实现生成均匀分布的点

如下所示: import numpy as np print(np.linspace(-100,100,201) np.linspace(),起始位置,终止位置,中间包括0,一共要...

Numpy截取指定范围内的数据方法

如下所示: lst = [[1,2,3,4,5,6], [7,8,9,10,11,12], [71,81,91,101,111,121]] arr = np.asarray(lst)...

Python实现正则表达式匹配任意的邮箱方法

Python实现正则表达式匹配任意的邮箱方法

首先来个简单的例子,利用Python实现匹配163邮箱的代码: #-*- coding:utf-8 -*- __author__ = '杨鑫' import re text = in...