diff --git a/文件管理1.ipynb b/文件管理1.ipynb old mode 100644 new mode 100755 index 8155f5a..5175762 --- a/文件管理1.ipynb +++ b/文件管理1.ipynb @@ -390,163 +390,26 @@ "## PDF文件读取" ] }, + { + "cell_type": "markdown", + "id": "308511e7-0f2d-40bc-a151-68f26ee635a2", + "metadata": {}, + "source": [ + "### pdfminer读取PDF文件" + ] + }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "0b0d621c-f2be-4dcb-a1f0-4b16196d25ee", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:pdfminer.cmapdb:The code b'c\\x07h\\x07\\xff\\x0cOFT\\x0ch7\\x9a\\xd8^\\xa6S\\xca\\x91\\xcd\\x91\\xcfv\\x84N\\xbab@b\\xe5g\\tv\\x84\\x81\\x02\\x80\\xaa\\x91\\xcfS\\xef\\x80\\xfdN\\rT\\x0c\\xff\\x0cN_\\x01f/b\\x11N\\xec\\x8b\\xf4v\\x84OS\\x81\\x02\\x80\\xaas\\x87\\xff\\x0cb@N\\xe5SUSUS\\xeag\\t' has an uneven length, trimming last byte.\n", - "WARNING:pdfminer.cmapdb:The code b\"g:OSS\\xeag\\tW(l'O\\x9b^\\x94QE\\x8d\\xb3v\\x84`\\xc5Q\\xb5N\\x0bbM\\x80\\xfdkc^8]\\xe5O\\x00\\x02N\\xbaOSQ\\x85\\x90\\xe8v\\x84l'O\\x9b~\\xd9Qh\\x90\\xe8\\x97`\\x80\\xbav\\x84T|T8ge\\x83\\xb7_\\x97\\xff\\x0cW(T|T8\" has an uneven length, trimming last byte.\n", - "WARNING:pdfminer.cmapdb:The code b\"\\x91\\xcfY'v\\x84N\\xbaQv\\x8e\\xabOSO\\x9bl'\\x80\\xfdR\\x9b\\x01_:\\xff\\x0c_\\xc3\\x80\\xbaR\\x9f\\x80\\xfd_:Y'0\\x02^\\x0cg\\x1b~\\xe7~\\xedO\\xddc\\x01\\x82oY}v\\x84Pe^\\xb7u\\x1fm;N``\\xef0\\x02\" has an uneven length, trimming last byte.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "中国石化\n", - "安庆石化公司\n", - "2021年09月\n", - "包永\n", - "00005\n", - "中国石化\n", - "安庆石化公司\n", - "姓名\n", - "编号\n", - "性别\n", - "年龄\n", - "1. 综合评定\n", - "包永\n", - "00005\n", - "男\n", - "44\n", - "测试标准\n", - "身高体重\n", - "肺活量\n", - "握力\n", - "坐位体前屈\n", - "纵跳\n", - "单脚站立\n", - "选择反应时\n", - "台阶指数\n", - "俯卧撑\n", - "国民体质测定标准\n", - "174.7 厘米, 73.6 公斤\n", - "3812 毫升\n", - "51 千克\n", - "20 厘米\n", - "38.4 厘米\n", - "13.2 秒\n", - "0.554 秒\n", - "65 分\n", - "39 次\n", - "5分\n", - "4分\n", - "4分\n", - "5分\n", - "4分\n", - "3分\n", - "3分\n", - "4分\n", - "5分\n", - "感谢您完成测试,以《国民体质测定标准》综合评级,您的总分为28分(其中项目纵跳、俯卧撑因\n", - "年龄或其它原因超出评级范围,得分仅供参考,不计入总分),等级为一级(优秀)。\n", - "2. 分析报告\n", - "身高(厘米)\n", - "174.7\n", - "体重(公斤)\n", - "73.6\n", - "理想BMI参考值:18.5 ~ 23.9\n", - "BMI\n", - "24.1\n", - "BMI是Body Mass Index的缩写,中文为「身高体重指数」,是以身高、体重比例拿来用作肥胖的\n", - "指标,但同样高度及重量的人所拥有的脂肪量可能不同,也Ŧ⽢ᅎ葏厁ʀꩳ蟿ౢ䁎啓啓\n", - "靠BMI值并无法完整反映出一个人的健康状态,建议可以两个数据搭配参考,对自己的身材更有了\n", - "解和掌握。 BMI值相同的人,体格可能不同。并不是每个人都适用BMI的。如:对肌肉很发达的运\n", - "动员或有水肿的病人,体重指数值可能较高,难以准确评估其肥胖程度。老年人的肌肉组织与其脂\n", - "肪组织相比,肌肉组织的减少较多,计算的体重指数值可能会低估其肥胖程度。而相等BMI值的女\n", - "性的体脂百分含量一般大于男性。\n", - "您的BMI值在正常范围之内。希望今后继续加强锻炼,保持良好的生活习惯。\n", - "肺活量(vital capacity)是指在最大吸气后尽力呼气的气量。包括潮气量、补吸气量和补呼气量三\n", - "部分。潮气量是指一次呼吸周期中肺吸量或呼出的气量,在潮气量之外再吸入的最大气量为补吸气\n", - "量,在潮气量之外再呼出的最最大量为补呼气量,最大呼气后残留在肺内的气量为余气量。 肺活量\n", - "与人的呼吸密切相关。生理学研究表明:人体的各器官、系统、组织、细胞每时每刻都在消耗氧,\n", - "机体只有在氧供应充足的情况下才能正常工伀Ɏ멏卑薐葬❏魾梐悀멶葔籔㡧斃띟響౗⡔籔\n", - "过程中,肺不仅要摄入氧气,还要将体内代谢出的二氧化碳排出。 可以这样认为:肺是机体气体交\n", - "换的中转站,这个中转站的容积大小直接决定着每次呼吸气体交换的量,这是检测肺功能的最直观、\n", - "也是最客观的指标。\n", - "健康状况愈好的人肺活量愈大,您的身体健康状况良好。肺活量能够反映一个人的心肺功能,肺活\n", - "量大的人其身体供氧能力ş㫿౟쎀멒龀ﵟ㩙✰ɞ౧᭾Ƃ潙絶葐敞띵Ὥ㭎恠\n", - "握力主要是测试上肢肌肉群的发达程度,测试受试者前臂和手部肌肉力量,反映人体上肢力量的发\n", - "展水平的一种指标。 在体能测试中,它常以握力体重指数的形式体现,即把握力的大小与被测人的\n", - "体重相联系,以获得最科学的体力评估。 握力测试偏重于力量,对于一般人而言,如果体检各项指\n", - "标正常且不是亚健康状态,即便握力较弱,基本不用担心影响寿命。 越来越多研究表明,握力强可\n", - "以保护我们免受心脏病、糖尿病和痴呆等疾病的侵害。\n", - "您的握力很好,研究发现握力强的健康中年人在记忆测试、推理和快速思考能力等方面表现更好,\n", - "说明您有健康的大脑,请保持良好的生活习惯。\n", - "坐位体前屈的测试目的是测量在静止状态下的躯干、腰、髋等关节可能达到的活动幅度,主要反映\n", - "这些部位的关节、韧带和肌肉的伸展性和弹性及身体柔韧素质的发展水平。 柔韧性是身体健康素质\n", - "的重要组成部分,经常做伸展练习可以保持肌腱、肌肉及韧带等软组织的弹性使柔韧性得到充分发\n", - "展,人体关节的活动范围将明显加大,关节灵活性也将增强。同时,动作将更加协调、准确、优美,\n", - "在体育活动和日常生活中可减少由于动作幅度加大、扭转过猛而产生的关节、肌肉等软组织损伤。\n", - "您的柔韧性程度较好,关节的活动幅度较大,关节灵活性较强。柔韧素质与健康的关系极为密切,\n", - "您的柔韧性高,也说明身体的协调能力强,能更好地发挥力量、速度等素质,对防止运动创伤等都\n", - "有积极的作用。\n", - "纵跳主要用来量化人体的爆发力,是人体肌肉力量、身体柔韧性、协调性的综合体现。 通过纵跳,\n", - "可以强化人的大小腿的肌肉,增强下肢力量,让人行走过程中步伐稳健,不易跌倒;同时可以增强\n", - "人体缓冲退让能力,使肌腱、韧带、肌肉都得到锻炼。 平时通过纵跳活动,能够活动筋骨,加强体\n", - "内物质代谢,增强骨骼强度和密度。\n", - "您的成绩良好,表明您肌肉力量、身体柔韧性、协调性方面综合性表现良好。希望今后加强锻炼,\n", - "注意保持。\n", - "闭眼单脚站立是通过测量人体在没有任何可视参照物的情况下,仅依靠大脑前庭器官的平衡感受器\n", - "和全身肌肉的协调运动,来维持身体重心在单脚支撑面上的时间,以反映平衡能力的强弱。 闭眼单\n", - "脚站立,归根到底,还是在测试人的平衡能力。平衡能力不仅是人们日常生活和体育活动中必须具\n", - "备的一种能力,它更是一种复杂的人体综合能力,平衡力下降,危害可想而知。近年来,我国国民\n", - "整体的平衡能力呈下降趋势,尤其是中老年群体。\n", - "您的成绩较低,说明身体老化比正常情况快,尤其是在平衡能力方面需要加强锻炼,建议经常练习\n", - "金鸡独立等锻炼人体平衡性的运动。\n", - "选择反应时是一个很敏锐的反应变量指标,是作为测量反应速度快慢及反应前后心理活动过程的客\n", - "观指标。 选择反应时能体现人的智力和能力,也可作为一种可靠的心理活动指标,测定大脑皮层的\n", - "兴奋和抑制功能,分析人的感觉,注意学习与记忆思维个性差别等各种心理活动。\n", - "您的成绩较低,可以参与针对性体育运动来提高反应速度和心理因素等方面的能力,比如太极拳,\n", - "瑜伽等。\n", - "台阶指数是用来评价心肺功能适应水平的方法。研究表明:心肺适应能力强的人比心肺适应能力弱\n", - "的人在运动后3分钟恢复期内心跳频率低。研究表明:心肺适应能力强的人比心肺适应能力弱的人\n", - "在运动后3分钟恢复期内心跳频率低。 台阶指数也是反映人体心血管系统机能状况的重要指数。台\n", - "阶试验指数值越大,则反映你心血管系统的机能水平越高,反之亦然,不过具体情况还要视被测人\n", - "的身高、体重和肺活量而定。\n", - "您的指数较好,在一定程度上反映出心血管系统机能很好,心肺适应能力较强。你的血液循环系统\n", - "工作正常——你的血管是健康的。请继续保持良好的生活习惯。\n", - "俯卧撑属于一种比较全面的锻炼方式,主要锻炼的是肱三头肌、腹肌等上肢肌肉,可以起到健美身\n", - "型的效果。同时能够加强心肺功能,促进身体血液循环,减少患病的比率。 俯卧撑对发展平衡和支\n", - "撑能力也起重要作用。可以改善中枢神经系统,有益于骨骼的坚实,关节的灵活,韧带的牢固,肌\n", - "肉的粗壮及弹性,同时能加速血液循环,增大肺活量,促进生长发育,提高运动能力。 结合身体情\n", - "况经常做俯卧撑,能让人心情放松,精力充沛,更好的投入到工作学习中。另外,俯卧撑对于消除\n", - "身体的赘肉也有一定效果,有利于减肥。\n", - "您的成绩良好,表明您肌肉力量等综合性表现良好。希望今后加强锻炼,注意保持。\n", - "3. 智慧健康方案\n", - "每个项目都与脏腑功能、人体八大系统能力息息相关,设法提高项目成绩,也可以改善潜在的亚健\n", - "康状态。\n", - "建议分类\n", - "建议项\n", - "您的身体状态非常好。几乎没有相关性较高的建议,希望您继续保持。系统会整合您的所有项目\n", - "成绩,依据相应年龄段、性别的每个项目与脏腑、经络、人体系统及子系统的权重和关系形成条\n", - "件,筛选出符合条件的所有身体机能成绩组合。特殊体质、职业(如运动相关)的人群可能存在\n", - "偏差,请以医院诊断为准。\n" - ] - } - ], + "outputs": [], "source": [ - "from pdfminer.pdfparser import PDFParser, PDFDocument\n", - "from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter\n", - "from pdfminer.converter import PDFPageAggregator\n", - "from pdfminer.layout import LAParams, LTTextBox\n", - "from pdfminer.pdfinterp import PDFTextExtractionNotAllowed\n", + "from newpdfminer.pdfparser import PDFParser, PDFDocument\n", + "from newpdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter\n", + "from newpdfminer.converter import PDFPageAggregator\n", + "from newpdfminer.layout import LAParams, LTTextBox\n", + "from newpdfminer.pdfinterp import PDFTextExtractionNotAllowed\n", "\n", "path = \"5.pdf\"\n", "\n", @@ -586,29 +449,23 @@ " print(x.get_text().strip())" ] }, + { + "cell_type": "markdown", + "id": "8fff7f1e-b52c-4666-8a2c-e9cde85a8e01", + "metadata": {}, + "source": [ + "### pdfplumber读取PDF文件" + ] + }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "c8685b70-55b3-439e-852d-c4fbb67b6326", "metadata": {}, - "outputs": [ - { - "ename": "ImportError", - "evalue": "cannot import name 'uint_value' from 'pdfminer.pdftypes' (/home/songyi/data/lib/python3.8/site-packages/pdfminer/pdftypes.py)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpdfplumber\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m# 读取 PDF 文档\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mpdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpdfplumber\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"5.pdf\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/data/lib/python3.8/site-packages/pdfplumber/__init__.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_version\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m__version__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mpdf\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPDF\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 11\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpdfminer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/data/lib/python3.8/site-packages/pdfplumber/pdf.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mitertools\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpdfminer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpdfparser\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPDFParser\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mpdfminer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpdfdocument\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPDFDocument\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpdfminer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpdfpage\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPDFPage\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpdfminer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpdfinterp\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPDFResourceManager\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/data/lib/python3.8/site-packages/pdfminer/pdfdocument.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mpsparser\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPSEOF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mliteral_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mLIT\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mKWD\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0msettings\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mpdftypes\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPDFException\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0muint_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mPDFTypeError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mPDFStream\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 15\u001b[0m \u001b[0mPDFObjectNotFound\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecipher_all\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist_value\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mdict_value\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstream_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mImportError\u001b[0m: cannot import name 'uint_value' from 'pdfminer.pdftypes' (/home/songyi/data/lib/python3.8/site-packages/pdfminer/pdftypes.py)" - ] - } - ], + "outputs": [], "source": [ "import pdfplumber\n", + "from PIL import Image\n", "\n", "# 读取 PDF 文档\n", "pdf = pdfplumber.open(\"5.pdf\")\n", @@ -618,75 +475,65 @@ "print(\"-----------------------------------------\")\n", "\n", "# 读取第 4 页;索引从 1 开始\n", - "page = pdf.pages[4] \n", + "page = pdf.pages[0] \n", "print(\"本页:\",page.page_number + 1)\n", "print(\"-----------------------------------------\")\n", - "\n", + "# 单页文件存储为图片\n", + "#im = page.to_image()\n", + "#im.save('./5_1.png', format='PNG')\n", + "# 单页文件中原始图片读取,不能读取图表文件\n", + "#imgs = page.images\n", + "#for i, img in enumerate(imgs):\n", + "# size = img['width'], img['height']\n", + "# data = img['stream'].get_data()\n", + "# out_path = f'003pdf_images_{i}.png'\n", + "# with open(out_path, 'wb') as fimg_out:\n", + "# fimg_out.write(data)\n", "# 导出第 4 页文本\n", "text = page.extract_text()\n", - "print(text)" + "print(text)\n" ] }, { - "cell_type": "code", - "execution_count": 18, - "id": "95e19593-a24a-4ded-a25b-abdc4685647e", + "cell_type": "markdown", + "id": "59e8775b-e2d6-4963-9376-4a944108ec58", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚\n", - "`'R+u7”«ıØOS‚Í•ºm;‚ÏcáRłWPOMOSRM\\H~µ“óSU†ˆzÙzËOïSgd‚^ú‰®Ÿy\n" - ] - } - ], "source": [ - "import PyPDF2 \n", - "import textract\n", - "\n", - "#open能让你读取文件\n", - "pdfFileObj = open('5.pdf','rb')\n", - "#变量pdfReader是即将被解析的可读对象\n", - "pdfReader = PyPDF2.PdfFileReader(pdfFileObj)\n", - "#分辨清楚页码数量能让我们解析所有页码的文件\n", - "num_pages = pdfReader.numPages\n", - "count = 0\n", - "text = \"\"\n", - "# while 循环会读取每一页\n", - "while count < num_pages:\n", - " pageObj = pdfReader.getPage(count)\n", - " count +=1\n", - " text += pageObj.extractText()\n", - "#这里的if语句用以检查上面的库是否返回了词汇,因为PyPDF2 无法读取扫描文本\n", - " if text != \"\":\n", - " text = text\n", - "# 如果上面返回False,就运行库textract 将PDF扫描文件转换为文本\n", - " \n", - " print(text)\n", - "# 现在我们获得了一个text变量,包含了从PDF文件中提取的文本。\n", - "# 输入print(text)查看包含的内容。可能会包含很多空格,可能还有’\\n’等这样的字眼。\n", - "# 下面我们会清洗得到的text变量,将其返回为一列关键字。" + "### fitz1.8读取PDF文件中的图片" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "id": "5ff3d5dd-b8dd-4707-8e29-26ba6cf97070", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "import fitz\n", + "import re\n", + "import os\n", + "\n", + "file_path = '5.pdf' # PDF 文件路径\n", + "dir_path = './data' # 存放图片的文件夹\n", + "\n", + "def pdf2image1(path, pic_path):\n", + " checkIM = r\"/Subtype(?= */Image)\"\n", + " pdf = fitz.open(path)\n", + " lenXREF = pdf.xref_length()\n", + " count = 1\n", + " for i in range(1, lenXREF):\n", + " text = pdf.xref_object(i)\n", + " isImage = re.search(checkIM, text)\n", + " if not isImage:\n", + " continue\n", + " pix = fitz.Pixmap(pdf, i)\n", + " new_name = f\"img_{count}.png\"\n", + " pix.writePNG(os.path.join(pic_path, new_name))\n", + " count += 1\n", + " pix = None\n", + "\n", + "pdf2image1(file_path, dir_path)" + ] } ], "metadata": {