| 
                         8.文本文件编码检测与转换。 
- import sys 
 - import os 
 - import argparse 
 - from chardet.universaldetector import UniversalDetector 
 - parser = argparse.ArgumentParser(description = '文本文件编码检测与转换') 
 - parser.add_argument('filePaths', nargs = '+', 
 -  help = '检测或转换的文件路径') 
 - parser.add_argument('-e', '--encoding', nargs = '?', const = 'UTF-8', 
 -  help = ''' 
 - 目标编码。支持的编码有: 
 - ASCII, (Default) UTF-8 (with or without a BOM), UTF-16 (with a BOM), 
 - UTF-32 (with a BOM), Big5, GB2312/GB18030, EUC-TW, HZ-GB-2312, ISO-2022-CN, EUC-JP, SHIFT_JIS, ISO-2022-JP, 
 - ISO-2022-KR, KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251, ISO-8859-2, windows-1250, EUC-KR, 
 - ISO-8859-5, windows-1251, ISO-8859-1, windows-1252, ISO-8859-7, windows-1253, ISO-8859-8, windows-1255, TIS-620 
 - ''') 
 - parser.add_argument('-o', '--output', 
 -  help = '输出目录') 
 - # 解析参数,得到一个 Namespace 对象 
 - args = parser.parse_args() 
 - # 输出目录不为空即视为开启转换, 若未指定转换编码,则默认为 UTF-8 
 - if args.output != None: 
 -  if not args.encoding: 
 -  # 默认使用编码 UTF-8 
 -  args.encoding = 'UTF-8' 
 -  # 检测用户提供的输出目录是否有效 
 -  if not os.path.isdir(args.output): 
 -  print('Invalid Directory: ' + args.output) 
 -  sys.exit() 
 -  else: 
 -  if args.output[-1] != '/': 
 -  args.output += '/' 
 - # 实例化一个通用检测器 
 - detector = UniversalDetector() 
 - print() 
 - print('Encoding (Confidence)',':','File path') 
 - for filePath in args.filePaths: 
 -  # 检测文件路径是否有效,无效则跳过 
 -  if not os.path.isfile(filePath): 
 -  print('Invalid Path: ' + filePath) 
 -  continue 
 -  # 重置检测器 
 -  detector.reset() 
 -  # 以二进制模式读取文件 
 -  for each in open(filePath, 'rb'): 
 -  # 检测器读取数据 
 -  detector.feed(each) 
 -  # 若检测完成则跳出循环 
 -  if detector.done: 
 -  break 
 -  # 关闭检测器 
 -  detector.close() 
 -  # 读取结果 
 -  charEncoding = detector.result['encoding'] 
 -  confidence = detector.result['confidence'] 
 -  # 打印信息 
 -  if charEncoding is None: 
 -  charEncoding = 'Unknown' 
 -  confidence = 0.99 
 -  print('{} {:>12} : {}'.format(charEncoding.rjust(8), 
 -  '('+str(confidence*100)+'%)', filePath)) 
 -  if args.encoding and charEncoding != 'Unknown' and confidence > 0.6: 
 -  # 若未设置输出目录则覆盖源文件 
 -  outputPath = args.output + os.path.basename(filePath) if args.output else filePath 
 -  with open(filePath, 'r', encoding = charEncoding, errors = 'replace') as f: 
 -  temp = f.read() 
 -  with open(outputPath, 'w', encoding = args.encoding, errors = 'replace') as f: 
 -  f.write(temp) 
 
  
最后两个脚本内容选至实验楼的课程《使用 Python3  编写系列实用脚本》,课程对这两个脚本有详细的实现过程讲解,感兴趣的同学可以直接前往实验楼进行学习! 
                         (编辑:我爱故事小小网_铜陵站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |