jerkzhang,stay hungry, stay foolish
经常遇到网友提出,如何将不知名的各种格式的文本用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