{ "cells": [ { "cell_type": "markdown", "id": "333a5431-a697-4330-a587-455d6d18ebb0", "metadata": {}, "source": [ "# 文件管理" ] }, { "cell_type": "markdown", "id": "bcd48bb6-4756-4748-ac8b-854eeee92a3b", "metadata": {}, "source": [ "## 数字文件名转换为文本文件名" ] }, { "cell_type": "code", "execution_count": null, "id": "54b320e8-c3c1-4214-9a9e-db13c2558604", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import openpyxl\n", "import math\n", "\n", "fi_xls = os.getcwd() + '/file/中国石油化工股份有限公司安庆炼化分公司员工在职人员名单.xlsx'\n", "fi_path = os.getcwd() + '/file/210924'\n", "old = []\n", "dict1 = {}\n", "\n", "wb = openpyxl.load_workbook(fi_xls)\n", "sheet = wb.active\n", "depart = []\n", "for n in range(2,sheet.max_row+1): \n", " m_name = sheet.cell(n,1).value.strip()\n", " m_depart = sheet.cell(n,5).value\n", " if m_depart not in depart:\n", " depart.append(sheet.cell(n,5).value)\n", " dict1[int(m_name.split('.')[0])] = [sheet.cell(n,2).value.strip(),sheet.cell(n,5).value.strip()]\n", " \n", "# 创建部门办公室 \n", "m_path = fi_path = os.getcwd()+'/file/210924/new'\n", "for pn in depart:\n", " if not os.path.exists(m_path + '/' + pn):\n", " os.mkdir(m_path + '/' + pn)\n", "fl=os.listdir(fi_path)\n", "for fn in fl:\n", " if os.path.isfile(fi_path + '/' + fn):\n", " ofn = int(fn.split('.')[0])\n", " old.append(ofn) \n", "old.sort()\n", "for n in old: \n", " o_name = f'{fi_path}/{n}.pdf'\n", " n_name = f'{fi_path}/new/{dict1[n][1]}/{dict1[n][0]}.pdf'\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(o_name,n_name)\n", " print(n_name)\n", "#print(dict1)" ] }, { "cell_type": "markdown", "id": "69712868-6786-430b-8591-f6828d781588", "metadata": {}, "source": [ "## PDF文件压缩" ] }, { "cell_type": "code", "execution_count": null, "id": "8492dc14-739e-4c78-a302-f4b57ae571dd", "metadata": {}, "outputs": [], "source": [ "import fitz\n", "import os\n", "\n", "\n", "def covert2pic(zoom):\n", " if os.path.exists('.pdf'): # 临时文件,需为空\n", " os.removedirs('.pdf')\n", " os.mkdir('.pdf')\n", " for pg in range(totaling):\n", " page = doc[pg]\n", " zoom = int(zoom) #值越大,分辨率越高,文件越清晰\n", " rotate = int(0)\n", " print(page)\n", " trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).preRotate(rotate)\n", " pm = page.getPixmap(matrix=trans, alpha=False)\n", " \n", " lurl='.pdf/%s.jpg' % str(pg+1)\n", " pm.writePNG(lurl)\n", " doc.close()\n", "\n", "def pic2pdf(obj):\n", " doc = fitz.open()\n", " for pg in range(totaling):\n", " img = '.pdf/%s.jpg' % str(pg+1)\n", " imgdoc = fitz.open(img) # 打开图片\n", " pdfbytes = imgdoc.convertToPDF() # 使用图片创建单页的 PDF\n", " os.remove(img) \n", " imgpdf = fitz.open(\"pdf\", pdfbytes)\n", " doc.insertPDF(imgpdf) # 将当前页插入文档\n", " if os.path.exists(obj): # 若文件存在先删除\n", " os.remove(obj)\n", " doc.save(obj) # 保存pdf文件\n", " doc.close()\n", "\n", "\n", "def pdfz(sor, obj, zoom): \n", " covert2pic(zoom)\n", " pic2pdf(obj)\n", " \n", "\n", "\n", "sor = \"5.pdf\" # 需要压缩的PDF文件\n", "obj = \"new-\" + sor\n", "doc = fitz.open(sor) \n", "totaling = doc.pageCount\n", "\n", "zoom = 150 # 清晰度调节,缩放比率\n", "pdfz(sor, obj, zoom)\n", "os.removedirs('.pdf')\n" ] }, { "cell_type": "code", "execution_count": null, "id": "88d84849-5b98-48cb-86b1-e96757a8615f", "metadata": {}, "outputs": [], "source": [ "from pdf2image import convert_from_path, convert_from_bytes\n", "import os,sys\n", "import tempfile\n", "from pdf2image.exceptions import (\n", " PDFInfoNotInstalledError,\n", " PDFPageCountError,\n", " PDFSyntaxError\n", ")\n", "#images = convert_from_path('1.pdf',dpi=200,fmt='jpg', output_folder='./sample_data')\n", "with tempfile.TemporaryDirectory() as path:\n", " images_from_path = convert_from_path('5.pdf', dpi=100,fmt='jpg', output_folder='./pic')\n", "print(path)" ] }, { "cell_type": "code", "execution_count": null, "id": "058a40ba-4948-4675-8400-e4c762e836ee", "metadata": {}, "outputs": [], "source": [ "import img2pdf \n", "import os,sys\n", "import glob\n", "\n", "fl=glob.glob('./pic/*.jpg')\n", "fl.sort()\n", "a4inpt = (img2pdf.mm_to_pt(210),img2pdf.mm_to_pt(297))\n", "layout_fun = img2pdf.get_layout_fun(a4inpt)\n", "with open(\"name.pdf\",\"wb\") as f:\n", " f.write(img2pdf.convert(fl,layout_fun=layout_fun))" ] }, { "cell_type": "code", "execution_count": null, "id": "e997ad75-b2d9-43bf-a1de-8833cfe0cf6a", "metadata": {}, "outputs": [], "source": [ "import glob\n", "import fitz # 导入本模块需安装pymupdf库\n", "import os,sys\n", "\n", "def pic2pdf_1(img_path, pdf_path, pdf_name):\n", " doc = fitz.open()\n", " fl=os.listdir(img_path)\n", " fl.sort()\n", " width, height = fitz.PaperSize(\"a4\")\n", " for img in fl:\n", " fn = img_path+'/'+img\n", " if os.path.isfile(fn):\n", " imgdoc = fitz.open(img_path+'/'+img)\n", " pdfbytes = imgdoc.convertToPDF()\n", " imgpdf = fitz.open(\"pdf\", pdfbytes,width = width, height = height)\n", " doc.insertPDF(imgpdf)\n", " doc.save(pdf_path +'/'+ pdf_name)\n", " doc.close()\n", "\n", "img_path = os.getcwd() +'/pic'\n", "pdf_path = os.getcwd()\n", "pic2pdf_1(img_path=img_path, pdf_path=pdf_path, pdf_name='1.pdf')" ] }, { "cell_type": "markdown", "id": "1f38e4b6-ef20-4fef-801c-ff47951d2ad6", "metadata": {}, "source": [ "## 图片文件扫描识别" ] }, { "cell_type": "code", "execution_count": null, "id": "8c990b6a-7f8e-4527-a150-65f60bd131ac", "metadata": {}, "outputs": [], "source": [ "#将指定目录下图片文件进行文字识别\n", "import os,sys\n", "from aip import AipOcr\n", "import glob\n", "\n", "\"\"\" 你的 APPID AK SK \"\"\"\n", "APP_ID = '17553946'\n", "API_KEY = 'IMC1ss3Tyo3vEAdVH6jgcdv2'\n", "SECRET_KEY = 'Iua6KdhuDtz159rjzGeFGpqgjhnoU0zZ'\n", "\n", "client = AipOcr(APP_ID, API_KEY, SECRET_KEY)\n", "def get_file_content(filePath):\n", " with open(filePath, 'rb') as fp:\n", " return fp.read()\n", "\n", "options = {}\n", "options[\"language_type\"] = \"CHN_ENG\"\n", "options[\"detect_direction\"] = \"true\"\n", "options[\"detect_language\"] = \"true\"\n", "options[\"probability\"] = \"true\"\n", "\n", "fi_path = os.getcwd()+'/pic'\n", "fl = glob.glob(f'{fi_path}/*.jpg')\n", "fl.sort()\n", "for fl1 in fl:\n", " file_name = fl1\n", " image = get_file_content(file_name)\n", " result= client.basicGeneral(image, options)\n", " if 'words_result' in result:\n", " print('\\n'.join([w['words'] for w in result['words_result']]))\n", " print('\\n')\n", " \n", " " ] }, { "cell_type": "markdown", "id": "d936ca99-269b-46f8-8582-fb02ed2cd3cc", "metadata": {}, "source": [ "## word文档读取" ] }, { "cell_type": "code", "execution_count": 47, "id": "d8043425-be9e-4e9e-bbfc-3a2d8885a860", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ok\n" ] } ], "source": [ "import docx\n", "import json\n", "Doc = docx.Document(r\"症状对症处方选穴.docx\")\n", "#print(\"檔案內含段落數:\",len(Doc.paragraphs),\"\\n\")\n", "testList = []\n", "text1 = []\n", "dict1 = {}\n", "for text in Doc.paragraphs:\n", " testList.append(text)\n", "i = 0\n", "for pg in testList:\n", " \n", " if len(pg.text) >0:\n", " s = ''.join(pg.text.split()) \n", " if s[0:1] == '第':\n", " i += 1\n", " n = 0\n", " \n", " dict1.setdefault(i,{})\n", " dict1[i]['title'] = pg.text.split()[1]\n", " dict1[i]['sub'] = {}\n", " \n", " #dict1[i]['title'].setdefault(i,{})\n", " elif s[0:1] == '(':\n", " sub = s.split(')')[1]\n", " dict2 = {}\n", " dict1[i]['sub'].setdefault(sub,[])\n", " else:\n", " dict1[i]['sub'][sub].append(s)\n", "filename = '症状对症处方选穴.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False) \n", "print('ok') " ] }, { "cell_type": "code", "execution_count": 2, "id": "c440b599-9c80-4072-8543-d9c381214f1d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ok\n" ] } ], "source": [ "import docx\n", "import json\n", "Doc = docx.Document(r\"常见疾病辨病处方选穴.docx\")\n", "#print(\"檔案內含段落數:\",len(Doc.paragraphs),\"\\n\")\n", "testList = []\n", "text1 = []\n", "dict1 = {}\n", "for text in Doc.paragraphs:\n", " testList.append(text)\n", "i = 0\n", "for pg in testList:\n", " \n", " if len(pg.text) >0:\n", " s = ''.join(pg.text.split()) \n", " if s[0:1] == '第':\n", " i += 1\n", " n = 0\n", " \n", " dict1.setdefault(i,{})\n", " dict1[i]['title'] = pg.text.split('节')[1]\n", " dict1[i]['sub'] = {}\n", " \n", " #dict1[i]['title'].setdefault(i,{})\n", " elif s[0:1] == '(':\n", " sub = s.split(')')[1]\n", " dict2 = {}\n", " dict1[i]['sub'].setdefault(sub,[])\n", " else:\n", " dict1[i]['sub'][sub].append(s)\n", "filename = '常见疾病辨病处方选穴.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl,ensure_ascii=False)\n", "print('ok') " ] }, { "cell_type": "code", "execution_count": 69, "id": "b5e500b5-14d4-4417-8b5e-46df71a6b6b8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ok\n" ] } ], "source": [ "import json\n", "import re\n", "filename = '症状对症处方选穴.json'\n", "pattern = r'[\\d\\.]'\n", "mo =r'[\\u4e00-\\u9fa5]+'\n", "dict2 = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " m_title = v['title']\n", " for k1,v1 in v['sub'].items():\n", " sub_title = k1 \n", " s = ''\n", " for mx in v1: \n", " s = s + mx\n", " list1 = re.split(pattern, s)\n", " list2 = []\n", " for ss in list1:\n", " if ss != '':\n", " list3 = re.findall(mo,ss)\n", " list2.append(list3)\n", " \n", " #print(m_title,sub_title,list2)\n", " dict2.setdefault(m_title,{})\n", " dict2[m_title][sub_title] = list2\n", "filename = 'new_症状对症处方选穴.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict2, fl,ensure_ascii=False) \n", "print('ok') \n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "eeea1429-e574-4d3b-88fd-0ddb3c090947", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }