python--存储数据到txt和pdf文档以及乱码问题

本文介绍了如何使用Python处理文本文件及PDF文档,包括解决乱码问题的方法、读取TXT和PDF文档的技术细节,以及pdfminer3k库的安装与使用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一、几种常用方法

读取TXT文档:urlopen()

读取PDF文档:pdfminer3k

第二、乱码问题

(1)、

from urllib.request import urlopen
#访问wiki内容
html = urlopen("https://en.wikipedia.org/robots.txt")
print(html.read())

输出的结果中出现乱码原因:

计算机只能处理0和1两个数字,所以想要处理文本,必须把文本变成0和1这样的数字,最早的计算机使用八个0和1表示一个字节,所以最大能够表示整数是255=11111111.如果想要表示更大的数,必须使用更多的字节。

由于计算机是美国人发明的,所以最早只有127个字符被编写进计算机,即常见的阿拉伯数字,字母大小写,以及键盘上的符号。此编码被称为ASCII编码,比如大写字母A的ASCII编码是65,65再被转换二进制01000001,即是计算机处理的东西。

显然,ASCII不能表示中文,故中国制定了自己的GB2312编码,并且兼容ASCII编码。问题是:使用GB2312编码的慕课网三个字,假设编码为61,62,63.但在ASCII码表可能是其他字符。如下图示,日文中的616263编码成其他字符,打开后意思出错。


解决方法:国际上的unicode编码,整合全世界所有编码。故unicode编码的内容在任一台计算机用unicode仍正常打开


又对于A,ASCII编码为01000001,Unicode编码:0000000001000001此时浪费空间

故出现UTF-8编码:01000001此时用两个八位存储中文。

(2)、记事本使用unicode编码,将记事本存到计算机时,将转化为utf-8储存。

在计算机中打开文本时,将转化为unicode编码

存储原因:使用utf-8储存节省空间,使用unicode打开保证最大的兼容

(3)、服务器读取uncode编码的文档,转化为utf-8格式传给浏览器。因为网络带宽昂贵,转化为了减少负担。

(4)、python3字符串默认使用Unicode编码,所以python3支持多种语言

以Unicode表示的str通过encode()方法可以编码为指定的bytes

如果bytes使用ASCII编码,遇到ASCII码表没有的字符会以\x##表示,此时只用‘\x##'.decode('utf-8')即可

(5)、解决方法

from urllib.request import urlopen
#访问wiki内容
html = urlopen("https://en.wikipedia.org/robots.txt")
print(html.read().decode("utf-8"))

第三、pdfminer3k安装

法一:(1)、进入网址直接下载并解压:https://pypi.python.org/pypi/pdfminer3k/

(2)、以管理员身份运行命令行窗口,进入软件解压缩位置,运行python setup.py install


法二:(3)、直接在pycharm中安装


(4)、读取pdf过程:首先创建一个分析器pdfparser和文档对象pdfdocument,并通过两个方法相互关联,然后调用文档对象的初始化方法(可以传参数),此时资源内容被加载到文档对象中。


创建资源管理器和参数分析器,然后创建聚合器(整合资源管理器和参数分析器),通过聚合器创建解释器(对pdf文档进行编码,解释成python能识别的格式)


(5)、读取pdf文档:通过文档对象的get_pages()方法得到pdf每一页的内容,通过解释器的process_page()方法读取一页一页。


(6)、实例演示

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

#获得文档对象,以二进制读方式打开
fp = open("naacl06-shinyama.pdf", "rb")

#创建一个与文档关联的分析器
parser = PDFParser(fp)

#创建一个pdf文档的对象
doc = PDFDocument()

#连接解释器与文档对象
parser.set_document(doc)
doc.set_parser(parser)

#初始化文档,如果文档有密码,写与此。
doc.initialize("")

#创建pdf资源管理器
resource = PDFResourceManager()

#参数分析器
laparam = LAParams()

#创建聚合器
device = PDFPageAggregator(resource, laparams=laparam)

#创建pdf页面解释器
interpreter = PDFPageInterpreter(resource, device)

#使用文档对象得到页面的集合
for page in doc.get_pages():
    #使用页面解释器读取
    interpreter.process_page(page)
    #使用聚合器来获得内容
    layout = device.get_result()
    for out in layout:
        if hasattr(out, "get_text"):
            print(out.get_text())

一下用于读取网站上pdf内容

fp = urlopen("http://www.tencent.com/zh-cn/articles/8003251479983154.pdf")

补充内容:


### 实现过程 为了将PDF文件中的表格转换为UTF-8编码的Excel文件,可以采用如下方法: #### 安装必要的库 首先需要安装几个重要的Python库来处理PDFExcel文件。可以通过命令行工具pip来进行安装。 ```bash pip install PyPDF2 pandas openpyxl tabula-py ``` 这些库分别用于读取PDF文件、操作数据框以及保存至Excel文件[^1]。 #### 提取PDF中的表格数据 使用`tabula-py`可以从PDF中抽取表格内容,并将其转化为Pandas的数据帧对象(DataFrame),这一步骤对于后续处理非常重要。 ```python import tabula # 从指定路径加载PDF文档, 并提取所有页面上的表格作为DataFrame列表返回 tables = tabula.read_pdf("path_to_your_file.pdf", pages='all', multiple_tables=True) for i, table in enumerate(tables): print(f"Table {i}:") print(table.head()) # 显示前几行以确认是否正确读入 ``` 这段代码会尝试解析整个PDF文档内的每一个表单结构,并打印出来以便验证其准确性[^4]。 #### 数据清理与预处理 在某些情况下,所获得的数据可能包含一些不需要的信息或是格式不一致的情况。此时应该利用Pandas提供的功能对数据进行清洗调整,比如去除多余的空白字符、重命名列名等。 ```python cleaned_tables = [] for df in tables: cleaned_df = df.dropna(how="all").reset_index(drop=True) # 删除全为空白的行并重新索引 cleaned_tables.append(cleaned_df) ``` 此部分确保最终写入Excel的数据是干净整洁且易于理解的形式。 #### 创建带有UTF-8编码的Excel文件 最后一步则是把整理好的数据存储成Excel格式。这里特别指定了encoding参数为utf-8,从而保证中文或其他特殊字符能被正确表示。 ```python from pathlib import Path output_path = "output.xlsx" with pd.ExcelWriter(output_path, engine='openpyxl') as writer: for idx, tbl in enumerate(cleaned_tables): sheet_name = f'Sheet{idx+1}' tbl.to_excel(writer, index=False, encoding='utf-8-sig', sheet_name=sheet_name) print(f"All data has been successfully written to '{Path(output_path).absolute()}'.") ``` 上述脚本实现了完整的流程:从读取PDF里的表格信息直到生成新的Excel工作簿;同时通过设置合适的编码选项解决了潜在的文字乱码问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值