中文csv文本编码转utf8那些事 - python实现

简介: 中文csv文本编码转utf8那些事 - python实现

中文csv文本编码转utf8那些事 - python

请参考以下代码:

# -*- coding: utf-8 -*-  
##!/usr/bin/python3
# @Author : Jack Lee
# @Email : 291148484@163.com
import os
import time
import codecs
import chardet
class CodeError(ValueError):pass
def get_time() -> str:
    return str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
def which_codes(filepath):
    # c = codecs.open(filepath,"r")
    # print(c)
    # return c.encoding
    with open(filepath,'rb') as f:
        content = f.read()
    return chardet.detect(content).get('encoding').lower()
def open_gbk_as_str(filepath)-> str:
    with open(filepath,'r',encoding='gbk') as f:
        content = f.read()
    return content
def open_big5_as_str(filepath)-> str:
    with open(filepath,'r',encoding='big5') as f:
        content = f.read()
    return content
def open_big5hkscs_as_str(filepath)-> str:
    with open(filepath,'r',encoding='big5hkscs') as f:
        content = f.read()
    return content
def open_cp950_as_str(filepath)-> str:
    with open(filepath,'r',encoding='cp950') as f:
        content = f.read()
    return content
def open_gb2312_as_str(filepath)-> str:
    with open(filepath,'r',encoding='gb2312') as f:
        content = f.read()
    return content
def open_hz_as_str(filepath)-> str:
    with open(filepath,'r',encoding='hz') as f:
        content = f.read()
    return content
def open_ascii_as_str(filepath)-> str:
    with open(filepath,'r',encoding='ascii') as f:
        content = f.read()
    return content
def open_utf8_as_str(filepath)-> str:
    with open(filepath,'r',encoding='utf-8') as f:
        content = f.read()
    return content
def open_utf16_as_str(filepath)-> str:
    with open(filepath,'rb') as f:
        content = f.read()
    return str(content,encoding='utf-16')
def open_utf32_as_str(filepath)-> str:
    with open(filepath,'rb') as f:
        content = f.read()
    return str(content,encoding='utf-32')
def open_as_str(filepath):
    codes = which_codes(filepath)
    # gbk encode
    if codes == "936" or codes == "cp936" or codes == "ms936" or codes == "gbk":
        print("[INFO] "+get_time()+" GBK, codes =",codes)
        return open_gbk_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # big5 encode
    if codes == "big5" or codes == "big5-tw" or codes == "csbig5":
        print("[INFO] "+get_time()+" big5, codes =",codes)
        return open_big5_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # big5hkscs encode
    if codes == "big5hkscs" or codes == "big5-hkscs" or codes == "hkscs":
        print("[INFO] "+get_time()+" big5hkscs, codes =",codes)
        return open_big5hkscs_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # cp950 encode
    if codes == "cp950" or codes == "950" or codes == "ms950":
        print("[INFO] "+get_time()+" cp950, codes =",codes)
        return open_cp950_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # gb2312 encode
    if codes == "gb2312" or codes == "chinese" or codes == "csiso58gb231280" or codes == "euc-cn" or codes == "euccn" or codes == "eucgb2312-cn" or codes == "gb2312-1980" or codes == "gb2312-80" or codes == "iso-ir-58":
        print("[INFO] "+get_time()+" gb2312, codes =",codes)
        return open_gb2312_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # hz encode
    if codes == "hz" or codes == "hzgb" or codes == "hz-gb" or codes == "hz-gb-2312":
        print("[INFO] "+get_time()+" hz, codes =",codes)
        return open_cp950_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # ascii encode
    elif codes == 'ascii':
        print("[INFO] "+get_time()+" encoding = ascii")
        return open_ascii_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # utf-16 encode
    elif codes == 'utf-16' or codes == 'U16' or codes == 'utf16' or codes == 'utf_16':
        print("[INFO] "+get_time()+" utf-16, codes =",codes)
        return open_utf16_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # utf-32 encode
    elif codes == 'utf-32' or codes == 'U32' or codes == 'utf32' or codes == 'utf_32':
        print("[INFO] "+get_time()+" utf-32, codes =",codes)
        return open_utf32_as_str(filepath).encode(encoding='utf-8').decode(encoding='utf-8')
    # utf-8 encode
    elif codes == "utf-8" or codes == "U8" or codes == "cp65001" or codes == "utf8" or codes == "UTF":
        print("[INFO] "+get_time()+" utf-8, codes =",codes)
        return open_utf8_as_str(filepath)
    # other unrecognized codes:
    else:
        print('[CRITICAL] '+get_time()+' The current encoding used is:"'+codes+'", the program failed to process this encoding.')
        raise CodeError('Text file:"'+filepath+'" which encoding method cannot be read.')
# Used to replace the specified csv with the corresponding utf8 encoded csv.
def replace_by_utf8_csv(filepath):
    s = ""
    l = open_as_str(filepath).split('\n\r')
    for i in l:
        if i!="":
            s=s+i
    with open(filepath, 'w', encoding='utf-8') as f:
        f.write(s)
    print('[INFO] '+get_time()+' Translated file '+ filepath +' into utf-8.')
# print(open_as_str(r'C:\Users\a2911\Desktop\script\sources\aaa.csv'))

说明:

  1. 调用 open_as_str 函数用于打开一个文本文件,得到相应的 utf-8 字符串;
  2. 调用 replace_by_utf8_csv 用于,将一个非 utf-8 的 csv 替换为同名 utf-8 的 csv。
目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 API
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程
如何使用阿里云的语音合成服务(TTS)将文本转换为语音?本文详细介绍了从注册账号、获取密钥到编写Python代码调用TTS服务的全过程。通过简单的代码示例,展示如何将文本转换为自然流畅的语音,适用于有声阅读、智能客服等场景。
268 3
|
2月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
104 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
3月前
|
数据挖掘 数据处理 索引
python 读取数据存为csv
在Python中,读取数据并将其保存为CSV(逗号分隔值)文件是一种常见的操作,特别适用于数据分析和数据科学领域。这里将展示如何使用Python的内置库`csv`和流行的数据处理库`pandas`来完成这项任务。 ### 使用`csv`模块 如果你正在处理的是简单的文本数据或者需要更低层次的控制,可以使用Python的`csv`模块。以下是一个基本示例,演示如何将数据写入CSV文件: ```python import csv # 假设这是你要写入CSV的数据 rows = [ ["Name", "Age", "City"], ["Alice", 24, "New Yor
108 36
|
2月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
58 2
|
2月前
|
Python
Python实用记录(四):os模块-去后缀或者改后缀/指定目录下图片或者子目录图片写入txt/csv
本文介绍了如何使用Python的os模块来操作文件,包括更改文件后缀、分割文件路径和后缀、将指定目录下的所有图片写入txt文档,以及将指定目录下所有子目录中的图片写入csv文档,并为每个子目录分配一个标签。
28 1
|
2月前
|
机器学习/深度学习 自然语言处理 大数据
使用Python进行文本情感分析
【10月更文挑战第2天】使用Python进行文本情感分析
55 3
|
3月前
|
Linux 开发者 iOS开发
Python中使用Colorama库输出彩色文本
Python中使用Colorama库输出彩色文本
|
3月前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
161 6
|
3月前
|
Python
Python 中如何指定 open 编码为ANSI
Python 中如何指定 open 编码为ANSI
67 1
|
2月前
|
存储 JSON 数据格式
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
Python 输入输出与文件处理: io、pickle、json、csv、os.path 模块详解
43 0