专否 写文章

jerkzhang

Jan 12, 2023
Follow

Python将各种格式的文本万能转码为utf-8的方法

经常遇到网友提出,如何将不知名的各种格式的文本用python转为utf-8格式的文本文件;有时甚至提问者根本搞不清楚自己的文本的编码格式是什么,一般使用vim来看,加:set的方法看得比较准,至于“File -I 具体的文件名”亦或是python的chardet库的chardet.detect都没有那么准确。

所以,我这想了一种万能的方法,不管是什么格式的文本文件,只要是能转成utf-8的,那几乎都能搞定。那就是利用chrome浏览器,把文本文件当做内容来读取,chrome浏览器会自动转码。

至于如何批量化,那就是通过Selenium控制chrome即可。

写一个简单的示例如下,具体需求可能需要进一步完善:

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from ctool import *
import time
import tornado.escape as es

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless') # 用headless模式启动
chrome_options.add_argument('--disable-gpu') # 禁用gpu
chrome_options.add_argument('--disable-extensions') # 禁用插件(可选)
chrome_options.add_argument('blink-settings=imagesEnabled=false') 

# ./chromedriver 是chromedriver的路径,这里换成你自己存放chromedriver的路径
driver = webdriver.Chrome(chrome_options=chrome_options, \
                          executable_path='./chromedriver')

# 对文件进行转化
driver.get( 'file:///xxx/filename.txt' )
f = open( "output.txt", "w" )
f.write( es.native_str( driver.page_source ) )
f.close()
driver.quit()



因为浏览器无法浏览超级大的文件,因此面对巨型文件,建议把巨型文件拆分成不超过10M的文件若干,如下:

split -b 10m big.txt


喜欢这个文章 | 分享 | 新建跟帖