第二关——小白的华丽转身

知识点:数据类型、数据拼接和数据转换+PDF文件提取合并转WORD

计算机的本质就是一个可以做复杂计算的机器,它的主要任务就是处理各种数据,并实现数据间的转换,而这些数据的类型,就是计算机的语言类型。

数据类型:

最常用的数据类型有三种——字符串(str)、整数(int)和浮点数(float) 。

(1)字符串

  • 字符串最明显的识别方式就是它的外面要有【引号】,这是字符串最明显的特征。引号就是字符串数据的身份,只要是被单/双/三引号包括起来的内容,不论这个内容是中文、英文还是数字都表示是字符串类型。

  • 字符串类型必须有引号的辅助。不然代码就会报错,引号就是外衣,没有外衣就是在裸奔(辣眼睛,不敢看)。
  • tips:感觉单双引号都差不多,当用三引号里面的文字没有换行时,和单双引号的作用一样。

(2)整数

  • 整数是代码界的独行侠,为什么呢?那是因为它不需要任何外衣,可以在代码界自由穿梭,就像一个独行侠。

  • 整数的自由度很高可以自由地在print()函数中输出。

  • 它很难跟其他的数据类型合群。如果在print()函数中整数混入中文、英文,电脑就会报错,就像两个仇人相遇,必然要怒目相向;如果是整数和整数在一起就会英雄惜英雄,可以直接进行数学运算,并通过print()函数打印出来。

(3)算术运算符及优先级

运算符:

运算优先级口诀:

顺序从前到后,有括号先计算,先乘除后加减,有平方先平方。

(3)浮点数

0.02和0.39都是十进制,这就涉及到一个十进制和二进制运算转换的问题,Python在进行浮点数运算时,会先把0.02和0.39转化成二进制数才能计算,这里就不再展开了。【注:二进制数由0和1表示,逢二进一】

 

大家只需要知道浮点型数字不能简单理解为小数运算,要先把十进制数字转换成二进制,相加后后再将二进制结果转成十进制小数,这样计算后的结果就会有偏差。

数据拼接

(1)+

都是字符串型,可。

text1 = '孙尚香' 
text2 = '连续击杀8次'
text3 = '敌方'
text4 = '获得'
text5 = '超神称号'


print(text1+text2+text3+text4+text5)

(2)type()函数

当变量中既有字符串型又有整型时,利用type()函数查看各个变量的类型是什么。type()仅起查询的作用。

数据类型的转换

三种数据类型对应三种数据类型转换函数str()、int()和float();

(1)str()函数

不论数据是中文、数字、标点,str()函数都能将数据转换成其字符串类型,也可以理解成在str()函数的帮助下,数据就会被加上引号变成字符串。

year = 2020
goal = '我要实现一个小目标:先赚它'
count = 1000
unit ='万。'
print(str(year)+goal+str(count)+unit)

运行如下:

str()就相当于给整数加个引号变成字符串类型。

(2)int()函数

字符串类型的数字能转换为整数,int()函数不能把中文、浮点数类型的字符串或者标点符号转换成整数,字符串内容是整数的数据,才能被int()强制转换,其他类型都会报错。

字符串内容是浮点数类型的不能使用int()函数转换,但浮点数是可以被int()函数转换的。

int()函数会直接取整,跟小数四舍五入的处理方法不同。

(3)float函数

要转换字符串就是小数形式的,比如'5.2'这种,想让它保持小数形式的5.2,就要借助——float()函数。

总结

综合实例:

num1 = '5.2'
num2 = 2
note = '派森老师说:5.2+2等于'

要求输出结果:

派森老师说:5.2+2等于7

分析,上面的变量中,其中num1是含有浮点数的字符串,num2是整数,note也是字符串。

我们知道5.2+2等于7.2,要把7.2这个浮点数取整,转换成7,才是我们要的结果。

 

但是现在5.2是在一个字符串变量num1当中,我先将字符串转换为浮点数,float(num1)就可以得到浮点数5.2,这样就可以直接跟num2相加。

 

float(num1)+num2等于7.2,接着我们要对相加后的结果取整,int(float(num1)+num2),就得到整数7。

计算转换的工作就完成了,这时一个是字符串数据note,一个是整数7,它们还不能直接拼接,还要把7转换成字符串数据str(int(float(num1)+num2))

代码:

num1 = '5.2'
num2 = 2
note = '派森老师说:5.2+2等于'
print(note+str(int(float(num1)+num2)))

彩蛋——PDF文件提取合并转WORD

PDF提取合并:


import PyPDF2 #可从PDF文档提取信息
import os #用于获取需要合并的PDF文件所在路径
path="e:/派森教学案例库/AI/" # 文件夹路径
#1.获取需要用于合并的文件名及路径
files=[]
for file in os.listdir(path):
    if file.endswith(".pdf"): #排除文件夹内的其它干扰文件,只获取PDF文件
        files.append(path+file)
#2.获取每个PDF文件里面需要的信息并添加到写入文件
pdf_writer=PyPDF2.PdfFileWriter()
for file in files:
    pdf_obj=open(file,'rb')# 以二进制读取,将保留PDF中的所有信息
    pdf_reader=PyPDF2.PdfFileReader(pdf_obj)
    for page_num in range(0,pdf_reader.numPages): #不要第一页的封面,从第2页开始获取
        page_obj=pdf_reader.getPage(page_num)
        pdf_writer.addPage(page_obj)
#3.写入并保存汇总PDF文件
pdf_output_file=open("e:/派森教学案例库/AI/new.pdf",'wb') #以二进制写入,将保留源PDF中的所有信息
pdf_writer.write(pdf_output_file)
pdf_output_file.close()

提取PDF页面:

from PyPDF2 import PdfFileWriter, PdfFileReader

start_page = 15
# 开始页
end_page = 20
# 截止页
output = PdfFileWriter()
pdf_file = PdfFileReader(open("e:\\派森教学案例库\\AI\\ai2.pdf", "rb"))
pdf_pages_len = pdf_file.getNumPages()

# 保存input.pdf中的1-5页到output.pdf
for i in range(start_page, end_page):
    output.addPage(pdf_file.getPage(i))

outputStream = open("e:\派森教学案例库\AI\output2.pdf", "wb")
output.write(outputStream)

PDF转word:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import importlib
importlib.reload(sys)
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import *
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

''''' 
解析pdf文件,获取文件中包含的各种对象 
'''

# 解析pdf文件函数
def parse(pdf_path):
    fp = open(pdf_path, 'rb')  # 以二进制读模式打开
    # 用文件对象来创建一个pdf文档分析器
    parser = PDFParser(fp)
    # 创建一个PDF文档
    doc = PDFDocument()
    # 连接分析器 与文档对象
    parser.set_document(doc)
    doc.set_parser(parser)

    # 提供初始化密码
    # 如果没有密码 就创建一个空的字符串
    doc.initialize()

    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 创建PDf 资源管理器 来管理共享资源
        rsrcmgr = PDFResourceManager()
        # 创建一个PDF设备对象
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 创建一个PDF解释器对象
        interpreter = PDFPageInterpreter(rsrcmgr, device)

        # 用来计数页面,图片,曲线,figure,水平文本框等对象的数量
        num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0

        # 循环遍历列表,每次处理一个page的内容
        for page in doc.get_pages():  # doc.get_pages() 获取page列表
            num_page += 1  # 页面增一
            interpreter.process_page(page)
            # 接受该页面的LTPage对象
            layout = device.get_result()
            for x in layout:
                if isinstance(x, LTImage):  # 图片对象
                    num_image += 1
                if isinstance(x, LTCurve):  # 曲线对象
                    num_curve += 1
                if isinstance(x, LTFigure):  # figure对象
                    num_figure += 1
                if isinstance(x, LTTextBoxHorizontal):  # 获取文本内容
                    num_TextBoxHorizontal += 1  # 水平文本框对象增一
                    # 保存文本内容
                    with open(r'AIout.doc', 'a', encoding='utf-8') as f:  # 生成doc文件的文件名及路径
                        results = x.get_text()
                        f.write(results)
                        f.write('\n')
        print('对象数量:\n', '页面数:%s\n' % num_page, '图片数:%s\n' % num_image, '曲线数:%s\n' % num_curve, '水平文本框:%s\n'
              % num_TextBoxHorizontal)


if __name__ == '__main__':
    pdf_path = r'e:\派森教学案例库\AI\new.pdf'  # pdf文件路径及文件名
    parse(pdf_path)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值