python 實(shí)現(xiàn)存儲(chǔ)數(shù)據(jù)到txt和pdf文檔及亂碼問題的解決
第一、幾種常用方法
讀取TXT文檔:urlopen()
讀取PDF文檔:pdfminer3k
第二、亂碼問題
(1)、
from urllib.request import urlopen #訪問wiki內(nèi)容 html = urlopen("https://en.wikipedia.org/robots.txt") print(html.read())
輸出的結(jié)果中出現(xiàn)亂碼原因:
計(jì)算機(jī)只能處理0和1兩個(gè)數(shù)字,所以想要處理文本,必須把文本變成0和1這樣的數(shù)字,最早的計(jì)算機(jī)使用八個(gè)0和1表示一個(gè)字節(jié),所以最大能夠表示整數(shù)是255=11111111.如果想要表示更大的數(shù),必須使用更多的字節(jié)。
由于計(jì)算機(jī)是美國(guó)人發(fā)明的,所以最早只有127個(gè)字符被編寫進(jìn)計(jì)算機(jī),即常見的阿拉伯?dāng)?shù)字,字母大小寫,以及鍵盤上的符號(hào)。此編碼被稱為ASCII編碼,比如大寫字母A的ASCII編碼是65,65再被轉(zhuǎn)換二進(jìn)制01000001,即是計(jì)算機(jī)處理的東西。
顯然,ASCII不能表示中文,故中國(guó)制定了自己的GB2312編碼,并且兼容ASCII編碼。問題是:使用GB2312編碼的慕課網(wǎng)三個(gè)字,假設(shè)編碼為61,62,63.但在ASCII碼表可能是其他字符。如下圖示,日文中的616263編碼成其他字符,打開后意思出錯(cuò)。
解決方法:
國(guó)際上的unicode編碼,整合全世界所有編碼。故unicode編碼的內(nèi)容在任一臺(tái)計(jì)算機(jī)用unicode仍正常打開
又對(duì)于A,ASCII編碼為01000001,Unicode編碼:0000000001000001此時(shí)浪費(fèi)空間
故出現(xiàn)UTF-8編碼:01000001此時(shí)用兩個(gè)八位存儲(chǔ)中文。
(2)、記事本使用unicode編碼,將記事本存到計(jì)算機(jī)時(shí),將轉(zhuǎn)化為utf-8儲(chǔ)存。
在計(jì)算機(jī)中打開文本時(shí),將轉(zhuǎn)化為unicode編碼
存儲(chǔ)原因:使用utf-8儲(chǔ)存節(jié)省空間,使用unicode打開保證最大的兼容
(3)、服務(wù)器讀取uncode編碼的文檔,轉(zhuǎn)化為utf-8格式傳給瀏覽器。因?yàn)榫W(wǎng)絡(luò)帶寬昂貴,轉(zhuǎn)化為了減少負(fù)擔(dān)。
(4)、python3字符串默認(rèn)使用Unicode編碼,所以python3支持多種語(yǔ)言
以Unicode表示的str通過encode()方法可以編碼為指定的bytes
如果bytes使用ASCII編碼,遇到ASCII碼表沒有的字符會(huì)以\x##表示,此時(shí)只用‘\x##'.decode('utf-8')即可
(5)、解決方法
from urllib.request import urlopen #訪問wiki內(nèi)容 html = urlopen("https://en.wikipedia.org/robots.txt") print(html.read().decode("utf-8"))
第三、pdfminer3k安裝
法一:
(1)、進(jìn)入網(wǎng)址直接下載并解壓:https://pypi.python.org/pypi/pdfminer3k/
(2)、以管理員身份運(yùn)行命令行窗口,進(jìn)入軟件解壓縮位置,運(yùn)行python setup.py install
法二:
(3)、直接在pycharm中安裝
(4)、讀取pdf過程:首先創(chuàng)建一個(gè)分析器pdfparser和文檔對(duì)象pdfdocument,并通過兩個(gè)方法相互關(guān)聯(lián),然后調(diào)用文檔對(duì)象的初始化方法(可以傳參數(shù)),此時(shí)資源內(nèi)容被加載到文檔對(duì)象中。
創(chuàng)建資源管理器和參數(shù)分析器,然后創(chuàng)建聚合器(整合資源管理器和參數(shù)分析器),通過聚合器創(chuàng)建解釋器(對(duì)pdf文檔進(jìn)行編碼,解釋成python能識(shí)別的格式)
(5)、讀取pdf文檔:通過文檔對(duì)象的get_pages()方法得到pdf每一頁(yè)的內(nèi)容,通過解釋器的process_page()方法讀取一頁(yè)一頁(yè)。
(6)、實(shí)例演示
from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.pdfdevice import PDFDevice #獲得文檔對(duì)象,以二進(jìn)制讀方式打開 fp = open("naacl06-shinyama.pdf", "rb") #創(chuàng)建一個(gè)與文檔關(guān)聯(lián)的分析器 parser = PDFParser(fp) #創(chuàng)建一個(gè)pdf文檔的對(duì)象 doc = PDFDocument() #連接解釋器與文檔對(duì)象 parser.set_document(doc) doc.set_parser(parser) #初始化文檔,如果文檔有密碼,寫與此。 doc.initialize("") #創(chuàng)建pdf資源管理器 resource = PDFResourceManager() #參數(shù)分析器 laparam = LAParams() #創(chuàng)建聚合器 device = PDFPageAggregator(resource, laparams=laparam) #創(chuàng)建pdf頁(yè)面解釋器 interpreter = PDFPageInterpreter(resource, device) #使用文檔對(duì)象得到頁(yè)面的集合 for page in doc.get_pages(): #使用頁(yè)面解釋器讀取 interpreter.process_page(page) #使用聚合器來(lái)獲得內(nèi)容 layout = device.get_result() for out in layout: if hasattr(out, "get_text"): print(out.get_text())
一下用于讀取網(wǎng)站上pdf內(nèi)容
fp = urlopen(http://www.tencent.com/zh-cn/articles/8003251479983154.pdf)
補(bǔ)充內(nèi)容:
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- Python爬蟲爬取全球疫情數(shù)據(jù)并存儲(chǔ)到mysql數(shù)據(jù)庫(kù)的步驟
- Python爬取騰訊疫情實(shí)時(shí)數(shù)據(jù)并存儲(chǔ)到mysql數(shù)據(jù)庫(kù)的示例代碼
- MySQL和Python交互的示例
- 配置python連接oracle讀取excel數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的操作流程
- Python 對(duì)Excel求和、合并居中的操作
- 如何用python合并多個(gè)excel文件
- python基于pyppeteer制作PDF文件
- python操作mysql、excel、pdf的示例
相關(guān)文章
Python實(shí)現(xiàn)鼠標(biāo)自動(dòng)在屏幕上隨機(jī)移動(dòng)功能
這篇文章主要介紹了Python實(shí)現(xiàn)鼠標(biāo)自動(dòng)在屏幕上隨機(jī)移動(dòng)功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。還等什么?一起跟隨小編過來(lái)看看吧2020-03-03python常規(guī)方法實(shí)現(xiàn)數(shù)組的全排列
這篇文章主要介紹了python常規(guī)方法實(shí)現(xiàn)數(shù)組的全排列,實(shí)例分析了全排列的概念及Python常規(guī)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-03-03PyTorch中的C++擴(kuò)展實(shí)現(xiàn)
這篇文章主要介紹了PyTorch中的C++擴(kuò)展實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python中日志模塊logging的使用技巧和應(yīng)用詳解
在Python開發(fā)中,日志記錄是一個(gè)非常重要的環(huán)節(jié),它不僅有助于開發(fā)者追蹤程序的執(zhí)行流程,還能在出現(xiàn)問題時(shí)提供關(guān)鍵信息,幫助快速定位并解決問題,本文將結(jié)合實(shí)際案例,詳細(xì)介紹logging模塊的基礎(chǔ)用法和高級(jí)特性,需要的朋友可以參考下2024-08-08python下paramiko模塊實(shí)現(xiàn)ssh連接登錄Linux服務(wù)器
這篇文章主要介紹了python下paramiko模塊實(shí)現(xiàn)ssh連接登錄Linux服務(wù)器的方法,實(shí)例分析了paramiko模塊實(shí)現(xiàn)ssh連接的具體用法,需要的朋友可以參考下2015-06-06