1669 lines
75 KiB
Plaintext
1669 lines
75 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 数字文件名转换为文本文件名"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import os,sys,shutil\n",
|
||
"import openpyxl\n",
|
||
"import math\n",
|
||
"\n",
|
||
"fi_xls = os.getcwd()+'/file/北海石化监测花名册2022 .xlsx'\n",
|
||
"fi_name = {}\n",
|
||
"fi_path = os.getcwd()+'/file/221103'\n",
|
||
"old = []\n",
|
||
"new = []\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",
|
||
" if sheet.cell(n,3).value is not None: \n",
|
||
" m_name = sheet.cell(n,6).value.strip()\n",
|
||
" m_depart = sheet.cell(n,3).value.strip() \n",
|
||
" depart.append(m_depart) \n",
|
||
" dict1[int(sheet.cell(n,4).value)] = [m_name,m_depart]\n",
|
||
" #print()\n",
|
||
"# 创建部门办公室 \n",
|
||
"m_path = os.getcwd()+'/file/221103/new'\n",
|
||
"for pn in depart:\n",
|
||
" if not os.path.exists(m_path + '/' + pn):\n",
|
||
" os.mkdir(m_path + '/' + pn)\n",
|
||
"#print(dict1)\n",
|
||
"\n",
|
||
"\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",
|
||
" #print(fn)\n",
|
||
"old.sort()\n",
|
||
" #print(str(nfn)+'.pdf')\n",
|
||
"\n",
|
||
"for n in old:\n",
|
||
" \n",
|
||
" o_name = f'{fi_path}/{n}.pdf'\n",
|
||
" n_name = f'{fi_path}/new/{dict1[n][1]}/{str(n).rjust(5,\"0\")}-{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(old)\n",
|
||
"\n",
|
||
"#print(dict1)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 目录文件按照文件名排序"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"\n",
|
||
"import os,sys\n",
|
||
"\n",
|
||
"\n",
|
||
"fi_xls = 'test1.xlsx'\n",
|
||
"fi_name = {}\n",
|
||
"#fi_path = 'drive/My Drive/Colab Notebooks'+'/data'\n",
|
||
"fi_path = os.getcwd()+'/data'\n",
|
||
"old = []\n",
|
||
"new = []\n",
|
||
"\n",
|
||
"fl=os.listdir(fi_path)\n",
|
||
"fl.sort()\n",
|
||
"n = 0\n",
|
||
"for i in fl:\n",
|
||
" oldname=fl[n]\n",
|
||
" name, suffix = os.path.splitext(oldname)\n",
|
||
" if name in old:\n",
|
||
" new_name = fi_path+ os.sep + fi_name[name]+suffix\n",
|
||
" old_name = fi_path+ os.sep + fl[n]\n",
|
||
" os.rename(old_name,new_name)\n",
|
||
" n+= 1\n",
|
||
"fl"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"toc-hr-collapsed": true,
|
||
"toc-nb-collapsed": true
|
||
},
|
||
"source": [
|
||
"## 将pdf文件转为图片"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"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('./data/普通高等学校本科专业目录.pdf', dpi=300,fmt='jpg', output_folder='./data/pic')\n",
|
||
"print(path)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 新建二维码图片pdf文件"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from fpdf import FPDF\n",
|
||
"import warnings\n",
|
||
"\n",
|
||
"\n",
|
||
"warnings.filterwarnings(\"ignore\")\n",
|
||
"pdf = FPDF()\n",
|
||
"# compression is not yet supported in py3k version\n",
|
||
"pdf.compress = False\n",
|
||
"pdf.add_page()\n",
|
||
"# Unicode is not yet supported in the py3k version; use windows-1252 standard font\n",
|
||
"pdf.add_font('ali-regular', '', r\"fonts/AlibabaPuHuiTi-2-55-Regular.ttf\", uni=True)\n",
|
||
"pdf.set_font('ali-regular', '', 14) \n",
|
||
"#pdf.ln(10)\n",
|
||
"#pdf.write(5, '欢迎')\n",
|
||
"pdf.text(20,280,'欢迎来到中国,中国欢迎您!')\n",
|
||
"pdf.image(\"data/water/平和体质.png\", 50, 250,20)\n",
|
||
"\n",
|
||
"pdf.output('py3k.pdf', 'F')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"toc-hr-collapsed": true,
|
||
"toc-nb-collapsed": true
|
||
},
|
||
"source": [
|
||
"## 图像文件夹打包"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import zipfile\n",
|
||
"from pdf2image import convert_from_path, convert_from_bytes\n",
|
||
"import os,sys\n",
|
||
"import tempfile\n",
|
||
"import shutil\n",
|
||
"import time\n",
|
||
"\n",
|
||
"from pdf2image.exceptions import (\n",
|
||
" PDFInfoNotInstalledError,\n",
|
||
" PDFPageCountError,\n",
|
||
" PDFSyntaxError\n",
|
||
")\n",
|
||
"def compress_file(zipfilename, dirname): # zipfilename是压缩包名字,dirname是要打包的目录\n",
|
||
" if os.path.isfile(dirname):\n",
|
||
" with zipfile.ZipFile(zipfilename, 'w') as z:\n",
|
||
" z.write(dirname)\n",
|
||
" else:\n",
|
||
" with zipfile.ZipFile(zipfilename, 'w') as z:\n",
|
||
" for root, dirs, files in os.walk(dirname):\n",
|
||
" for single_file in files:\n",
|
||
" if single_file != zipfilename:\n",
|
||
" filepath = os.path.join(root, single_file)\n",
|
||
" z.write(filepath)\n",
|
||
"\n",
|
||
"def addfile(zipfilename, dirname):\n",
|
||
" if os.path.isfile(dirname):\n",
|
||
" with zipfile.ZipFile(zipfilename, 'a') as z:\n",
|
||
" z.write(dirname)\n",
|
||
" else:\n",
|
||
" with zipfile.ZipFile(zipfilename, 'a') as z:\n",
|
||
" for root, dirs, files in os.walk(dirname):\n",
|
||
" for single_file in files:\n",
|
||
" if single_file != zipfilename:\n",
|
||
" filepath = os.path.join(root, single_file)\n",
|
||
" z.write(filepath)\n",
|
||
"\n",
|
||
"#images = convert_from_path('1.pdf',dpi=200,fmt='jpg', output_folder='./sample_data')\n",
|
||
"def make_path(p):\n",
|
||
" if os.path.exists(p): # 判断文件夹是否存在\n",
|
||
" shutil.rmtree(p) # 删除文件夹\n",
|
||
" os.mkdir(p) \n",
|
||
"pdf_file = '2.pdf'\n",
|
||
"output_folder='./pic1'\n",
|
||
"zip_file = 'ribenweiqishihua.zip'\n",
|
||
"make_path(output_folder)\n",
|
||
"print (time.strftime(\"%a %b %d %H:%M:%S %Y\", time.localtime()))\n",
|
||
"with tempfile.TemporaryDirectory() as path:\n",
|
||
" images_from_path = convert_from_path(pdf_file, dpi=300,fmt='jpg', output_folder=output_folder)\n",
|
||
"compress_file(zip_file, output_folder) # 执行函数\n",
|
||
"print (time.strftime(\"%a %b %d %H:%M:%S %Y\", time.localtime()))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from opencc import OpenCC\n",
|
||
"\n",
|
||
"cc = OpenCC('t2s')\n",
|
||
"cc.convert(\"此亦寶力菱成上所不可缺者兹舉其基本變化十\")\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## PDF文本替换"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import fitz\n",
|
||
"doc = fitz.open(\"data/19524.pdf\")\n",
|
||
"page = doc.load_page(0)\n",
|
||
"# 遍历文本块,找到对应的文本块\n",
|
||
"def find_textbox(page:fitz.Page,keyword:str)->dict:\n",
|
||
"\tinfo = page.get_text('dict')\n",
|
||
"\tfor block in info['blocks']:\n",
|
||
"\t\tfor line in block['lines']:\n",
|
||
"\t\t\tfor span in line['spans']:\n",
|
||
"\t\t\t\ttext = span.get('text','').replace(' ','')\n",
|
||
"\t\t\t\tif text == keyword:\n",
|
||
"\t\t\t\t\treturn span\n",
|
||
"target = find_textbox(page,'北海炼化员工健康提示卡')\n",
|
||
"page.add_redact_annot(target['bbox'],'青海炼化员工健康提示卡',fontname='china-s',fontsize=40)\n",
|
||
"page.apply_redactions()\n",
|
||
"doc.save(\"19524.pdf\")\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"toc-hr-collapsed": true,
|
||
"toc-nb-collapsed": true
|
||
},
|
||
"source": [
|
||
"## 文本文件操作"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 基本读取"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import re\n",
|
||
"file_name = 'data/2012.txt'\n",
|
||
"with open(file_name,'r') as fl,open('new_2012_1.txt','w') as fl1:\n",
|
||
" for l in fl:\n",
|
||
" l = re.sub('[\\r\\n\\f ]{1,}', '', l)\n",
|
||
" if l.split():\n",
|
||
" print(l)\n",
|
||
" fl1.write(l)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 读取csv文件"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import csv\n",
|
||
"import re\n",
|
||
"\n",
|
||
"filename = 'data/130.csv'\n",
|
||
"with open(filename,'r',newline='') as csv_file:\n",
|
||
" fl = csv.reader(csv_file,delimiter=',')\n",
|
||
" header = next(fl) \n",
|
||
" for line in fl:\n",
|
||
" #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n",
|
||
" print(line)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 读取分隔符分割文件,导入MongoDB"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pymongo\n",
|
||
"import re\n",
|
||
"myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n",
|
||
"mydb = myclient[\"gaokao\"]\n",
|
||
"mycol = mydb[\"city\"]\n",
|
||
"m_mongo = {}\n",
|
||
"m_xx = []\n",
|
||
"fl_name = 'china-city-list.txt'\n",
|
||
"n = 0\n",
|
||
"with open(fl_name,'r') as fl:\n",
|
||
" for l in fl:\n",
|
||
" n += 1\n",
|
||
" if n >6:\n",
|
||
" m_mongo = {}\n",
|
||
" m_xx = re.sub('[ ]{1,}', '', l).split('|')\n",
|
||
" #print(m_xx[1],m_xx[3],m_xx[8],m_xx[10])\n",
|
||
" m_mongo['name'] = m_xx[3]\n",
|
||
" m_mongo['code'] = m_xx[1]\n",
|
||
" m_mongo['sheng'] = m_xx[8]\n",
|
||
" m_mongo['shi'] = m_xx[10]\n",
|
||
" m_mongo['jing'] = m_xx[11]\n",
|
||
" m_mongo['wei'] = m_xx[12]\n",
|
||
" mycol.insert_one(m_mongo) \n",
|
||
" #print(m_mongo)\n",
|
||
"print('ok!')\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 整理文件"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import re\n",
|
||
"file_name = 'file/三国演义.txt'\n",
|
||
"list1 = []\n",
|
||
"with open(file_name,'r') as fl:\n",
|
||
" for l in fl:\n",
|
||
" if len(l.strip())>0:\n",
|
||
" list1.append(l.strip()+'\\n')\n",
|
||
"with open('file/三国演义_new.txt','w') as fl1:\n",
|
||
" fl1.writelines(list1)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 读取html文件"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from bs4 import BeautifulSoup\n",
|
||
"import re\n",
|
||
"from pathlib import Path\n",
|
||
"\n",
|
||
"def get_html_title(html_file_path):\n",
|
||
" with open(html_file_path, 'r', encoding='utf-8') as f:\n",
|
||
" html_content = f.read()\n",
|
||
" \n",
|
||
" soup = BeautifulSoup(html_content, 'html.parser')\n",
|
||
" title_tag = soup.title\n",
|
||
" \n",
|
||
" if title_tag and hasattr(title_tag, 'string'):\n",
|
||
" return title_tag.string.strip()\n",
|
||
" else:\n",
|
||
" return None # 标签不存在或内容为空\n",
|
||
"\n",
|
||
"\n",
|
||
"path = Path('./file/guzi')\n",
|
||
"markdown_content = []\n",
|
||
"files = [file for file in path.iterdir() if file.is_file()]\n",
|
||
"sorted_files = sorted(files, key=lambda f: f.name)\n",
|
||
"print(type(sorted_files))\n",
|
||
"for file in sorted_files:\n",
|
||
" if file.suffix=='.html':\n",
|
||
" markdown_content.append('## '+get_html_title(file))\n",
|
||
" with open(file, 'r', encoding='utf-8') as f:\n",
|
||
" html_content = f.read() \n",
|
||
" soup = BeautifulSoup(html_content, 'html.parser')\n",
|
||
" div = soup.find('div', class_=\"show-content\")\n",
|
||
" p_elements = div.find_all('p') \n",
|
||
" for div in p_elements:\n",
|
||
" markdown_content.append(div.get_text(strip=True))\n",
|
||
" #markdown_content.append('\\n')\n",
|
||
" if file.suffix=='.md':\n",
|
||
" with open(file, 'r', encoding='utf-8') as f:\n",
|
||
" txt_content = f.read()\n",
|
||
" lines = txt_content.splitlines()\n",
|
||
" for line in lines:\n",
|
||
" line = line.strip()\n",
|
||
" markdown_content.append(line)\n",
|
||
" \n",
|
||
"markdown_content = '\\n'.join(markdown_content)\n",
|
||
"with open('guzi.md', 'w', encoding='utf-8') as file:\n",
|
||
" file.write(markdown_content)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from bs4 import BeautifulSoup\n",
|
||
"import re\n",
|
||
"from pathlib import Path\n",
|
||
"\n",
|
||
"\n",
|
||
"def get_html_title(html_file_path):\n",
|
||
" with open(html_file_path, 'r', encoding='utf-8') as f:\n",
|
||
" html_content = f.read()\n",
|
||
" \n",
|
||
" soup = BeautifulSoup(html_content, 'html.parser')\n",
|
||
" title_tag = soup.title\n",
|
||
" \n",
|
||
" if title_tag and hasattr(title_tag, 'string'):\n",
|
||
" return title_tag.string.strip()\n",
|
||
" else:\n",
|
||
" return None # 标签不存在或内容为空\n",
|
||
"\n",
|
||
"\n",
|
||
"file='file/guzi/1-01.html'\n",
|
||
"markdown_content = []\n",
|
||
"markdown_content.append('## '+get_html_title(file))\n",
|
||
"with open(file, 'r', encoding='utf-8') as f:\n",
|
||
" html_content = f.read()\n",
|
||
" \n",
|
||
" soup = BeautifulSoup(html_content, 'html.parser')\n",
|
||
" div = soup.find('div', class_=\"show-content\")\n",
|
||
" p_elements = div.find_all('p')\n",
|
||
" \n",
|
||
" for div in p_elements:\n",
|
||
" markdown_content.append(div.get_text(strip=True))\n",
|
||
" markdown_content.append('\\n')\n",
|
||
"markdown_content = '\\n'.join(markdown_content)\n",
|
||
"with open('1-01.md', 'w', encoding='utf-8') as file:\n",
|
||
" file.write(markdown_content)\n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Excel文件修改"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import openpyxl\n",
|
||
"import json\n",
|
||
"\n",
|
||
"filename = 'data/122.json'\n",
|
||
"with open(filename,'r') as fl:\n",
|
||
" dict1 = json.load(fl)\n",
|
||
"dict2 = {}\n",
|
||
"for k, v in dict1.items():\n",
|
||
" for item in v:\n",
|
||
" bh = item['avatar_id']\n",
|
||
" dict2[bh] = item\n",
|
||
"print(dict2) \n",
|
||
" \n",
|
||
"wb = openpyxl.load_workbook('data/济南炼化职工分组表.xlsx')\n",
|
||
"sheet = wb.active\n",
|
||
"person = {}\n",
|
||
"for n in range(2, sheet.max_row+1):\n",
|
||
" if sheet.cell(n, 14).value is not None and sheet.cell(n, 14).value in dict2.keys():\n",
|
||
" code = sheet.cell(n, 14).value\n",
|
||
" sheet[f'F{n}']=dict2[code]['birth']\n",
|
||
"wb.save('data/济南炼化职工分组表1.xlsx') \n",
|
||
"print('ok!') \n",
|
||
"\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### Excel文件内容生成markdown格式文本"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import openpyxl\n",
|
||
"\n",
|
||
"fi_xls = 'data/对局目录.xlsx'\n",
|
||
"\n",
|
||
"wb = openpyxl.load_workbook(fi_xls)\n",
|
||
"sheet = wb['卷18'] \n",
|
||
"\n",
|
||
"\n",
|
||
"for n in range(sheet.max_row - 1,sheet.max_row+1): \n",
|
||
" print('## 第'+sheet.cell(n,1).value+'局 ')\n",
|
||
" print(sheet.cell(n,2).value+' ')\n",
|
||
" print(sheet.cell(n,3).value+' ')\n",
|
||
" print('共'+sheet.cell(n,4).value+'着 ')\n",
|
||
" if sheet.cell(n,5).value is not None:\n",
|
||
" print(sheet.cell(n,5).value+' ')\n",
|
||
" print(sheet.cell(n,6).value+' ')\n",
|
||
" print('\\n')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import openpyxl\n",
|
||
"\n",
|
||
"fi_xls = 'data/对局目录.xlsx'\n",
|
||
"\n",
|
||
"wb = openpyxl.load_workbook(fi_xls)\n",
|
||
"sheet = wb['卷24'] \n",
|
||
"\n",
|
||
"\n",
|
||
"for n in range(50,562): \n",
|
||
" print(sheet.cell(n,1).value+' ')\n",
|
||
" if sheet.cell(n,2).value is not None:\n",
|
||
" print(sheet.cell(n,2).value+' ')\n",
|
||
" if sheet.cell(n,3).value is not None:\n",
|
||
" print(sheet.cell(n,3).value+' ')\n",
|
||
" print('\\n')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import openpyxl\n",
|
||
"\n",
|
||
"fi_xls = 'data/对局目录.xlsx'\n",
|
||
"\n",
|
||
"wb = openpyxl.load_workbook(fi_xls)\n",
|
||
"sheet = wb['卷22'] \n",
|
||
"\n",
|
||
"\n",
|
||
"for n in range(2,sheet.max_row+1): \n",
|
||
" print('## 第'+sheet.cell(n,1).value+'局 ')\n",
|
||
" print('第'+sheet.cell(n,2).value+'局 ')\n",
|
||
" print('共'+sheet.cell(n,3).value+'着 ')\n",
|
||
" print(sheet.cell(n,4).value+' ')\n",
|
||
" print(sheet.cell(n,5).value+' ')\n",
|
||
" print('\\n')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import openpyxl\n",
|
||
"\n",
|
||
"fi_xls = 'data/对局目录.xlsx'\n",
|
||
"\n",
|
||
"wb = openpyxl.load_workbook(fi_xls)\n",
|
||
"sheet = wb['卷24'] \n",
|
||
"\n",
|
||
"\n",
|
||
"for n in range(50,562): \n",
|
||
" #print(sheet.cell(n,1).value+' ')\n",
|
||
" if sheet.cell(n,2).value is not None:\n",
|
||
" print(sheet.cell(n,1).value+' '+sheet.cell(n,2).value+' '+sheet.cell(n,3).value+'局')\n",
|
||
" else:\n",
|
||
" print(sheet.cell(n,1).value+' ')\n",
|
||
" \n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import openpyxl\n",
|
||
"\n",
|
||
"fi_xls = 'data/对局目录.xlsx'\n",
|
||
"\n",
|
||
"wb = openpyxl.load_workbook(fi_xls)\n",
|
||
"sheet = wb['Sheet2'] \n",
|
||
"\n",
|
||
"\n",
|
||
"for n in range(2,sheet.max_row+1): \n",
|
||
" #print(sheet.cell(n,1).value+' ')\n",
|
||
" if sheet.cell(n,2).value is not None:\n",
|
||
" print(sheet.cell(n,1).value+' '+sheet.cell(n,2).value)\n",
|
||
" else:\n",
|
||
" print(sheet.cell(n,1).value+' ')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## YALM文件操作"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### YALM文件读取转存JSON文件"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import yaml\n",
|
||
"import json\n",
|
||
"\n",
|
||
"filename = 'data/全维健康中医体质检测问卷.yaml'\n",
|
||
"with open(filename, 'r', encoding='utf-8') as f:\n",
|
||
" result = yaml.load(f.read(), Loader=yaml.FullLoader)\n",
|
||
"i = 1\n",
|
||
"#print(result)\n",
|
||
"filename = 'data/全维健康中医体质检测问卷.json'\n",
|
||
"with open(filename, 'w') as fl:\n",
|
||
" json.dump(result, fl, ensure_ascii=False)\n",
|
||
"print('ok')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 按照年龄分组生成心理问卷"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import json\n",
|
||
"import os,sys,shutil\n",
|
||
"import openpyxl\n",
|
||
"\n",
|
||
"list1 = [\n",
|
||
" [1,'完全不正确','有点正确','多数正确','完全正确'],\n",
|
||
" [2,'从不','极少','偶尔','经常','频繁','非常频繁','每天'],\n",
|
||
" [3,'不符合','有时符合','常常符合','总是符合'],\n",
|
||
" [4,'从不','很少','有时','经常','总是'],\n",
|
||
" [5,'非常不满意','不满意','一般','满意','非常满意'],\n",
|
||
" [6,'没有或很少时间(少于1天)','一部分时间(1-2天)','相当多时间(3-4天)','绝大部分时间(5-7天)'],\n",
|
||
" [7,'从来没有这种感觉','很少有这种感觉','有时有这种感觉','经常有这种感觉'],\n",
|
||
" [8,'完全不同意','不同意','同意','完全同意'], \n",
|
||
" [10,'晚多了','晚一点','差不多','早一点','早多了']\n",
|
||
"]\n",
|
||
"dict1 = {}\n",
|
||
"for item in list1:\n",
|
||
" #dict1.setdefault(item[0],[])\n",
|
||
" list2 =[]\n",
|
||
" for i in range(1,len(item)):\n",
|
||
" list2.append(item[i])\n",
|
||
" dict1[item[0]] = list2\n",
|
||
"dict_choiced = {}\n",
|
||
"print(dict1)\n",
|
||
"wj = {}\n",
|
||
"wj[\"login\"] = \"phone\"\n",
|
||
"wj[\"locale\"] = \"zh-cn\"\n",
|
||
"wj[\"title\"] = '社区心理测评问卷'\n",
|
||
"list2 =[]\n",
|
||
"dict2 = {\n",
|
||
" \"type\": \"radiogroup\",\n",
|
||
" \"name\": \"Gender\",\n",
|
||
" \"title\": {\n",
|
||
" \"zh-cn\": \"您的性别\"\n",
|
||
" },\n",
|
||
" \"isRequired\": True,\n",
|
||
" \"choices\": [\n",
|
||
" {\n",
|
||
" \"value\": \"m\",\n",
|
||
" \"text\": \"男性\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"value\": \"f\",\n",
|
||
" \"text\": \"女性\"\n",
|
||
" }\n",
|
||
" ] \n",
|
||
"}\n",
|
||
"list2.append(dict2)\n",
|
||
"dict2 = {}\n",
|
||
"dict3 = {}\n",
|
||
"dict2 = {\n",
|
||
" \"type\": \"radiogroup\",\n",
|
||
" \"name\": \"Age\",\n",
|
||
" \"title\": {\n",
|
||
" \"zh-cn\": \"您的年龄\"\n",
|
||
" },\n",
|
||
" \"isRequired\": True,\n",
|
||
" \"choices\": [\n",
|
||
" {\n",
|
||
" \"value\": \"Y\",\n",
|
||
" \"text\": \"8-17岁\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"value\": \"M\",\n",
|
||
" \"text\": \"15-59岁\"\n",
|
||
" },\n",
|
||
" {\n",
|
||
" \"value\": \"O\",\n",
|
||
" \"text\": \"60岁及以上\"\n",
|
||
" }\n",
|
||
" ] \n",
|
||
"}\n",
|
||
"list2.append(dict2)\n",
|
||
"\n",
|
||
"wb = openpyxl.load_workbook('data/心理问卷.xlsx')\n",
|
||
"sheet = wb.active\n",
|
||
"data1 =list(sheet.values)\n",
|
||
"del data1[0]\n",
|
||
"for item in data1:\n",
|
||
" \n",
|
||
" dict2 = {} \n",
|
||
" dict2['type'] = item[4] \n",
|
||
" dict2['name'] = 'q'+str(item[0])+item[3]\n",
|
||
" dict2['visibleIf'] = '{Age}=\"'+item[3]+'\"'\n",
|
||
" dict3 = {}\n",
|
||
" dict3[\"zh-cn\"] = item[1]\n",
|
||
" dict2['title'] =dict3 \n",
|
||
" dict2['isRequired'] = True\n",
|
||
" if item[4] == 'rating':\n",
|
||
" dict2['rateMin'] = 0\n",
|
||
" dict2['rateMax'] = 7\n",
|
||
" dict2['minRateDescription'] = { 'zh-cn':'没有'}\n",
|
||
" dict2['maxRateDescription'] = { 'zh-cn':'非常同意'}\n",
|
||
" else:\n",
|
||
" if int(item[2]) in dict_choiced.keys():\n",
|
||
" dict2['choicesFromQuestion'] = dict_choiced[int(item[2])]\n",
|
||
" else:\n",
|
||
" list3 = []\n",
|
||
" i = 1\n",
|
||
" for xm in dict1[int(item[2])]:\n",
|
||
" dict3 = {}\n",
|
||
" dict3 = {'value': i,'text' : xm}\n",
|
||
" list3.append(dict3)\n",
|
||
" i+=1\n",
|
||
" dict2['choices'] = list3\n",
|
||
" dict_choiced[int(item[2])] = dict2['name']\n",
|
||
" list2.append(dict2)\n",
|
||
"dict3 = {}\n",
|
||
"dict3[\"elements\"] = list2\n",
|
||
"wj[\"pages\"] =[]\n",
|
||
"\n",
|
||
"wj[\"pages\"].append(dict3)\n",
|
||
"#filename = 'data/心理问卷1.json'\n",
|
||
"#with open(filename, 'w') as fl:\n",
|
||
"# json.dump(wj, fl, ensure_ascii=False)\n",
|
||
"#print('ok')\n",
|
||
"with open('心理问卷.yml', 'w', encoding='utf-8') as f:\n",
|
||
" yaml.dump(data=wj, stream=f, allow_unicode=True)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import yaml\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# 邮件管理"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 使用网易邮箱群发邮件"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from email.mime.text import MIMEText\n",
|
||
"from email.mime.multipart import MIMEMultipart\n",
|
||
"from email.mime.application import MIMEApplication\n",
|
||
"from email.header import Header\n",
|
||
"import smtplib\n",
|
||
"import requests\n",
|
||
"import time\n",
|
||
"import re\n",
|
||
"import json\n",
|
||
"\n",
|
||
"\n",
|
||
" \n",
|
||
"\n",
|
||
"fl_name = 'data/低碳院报告.json'\n",
|
||
"\n",
|
||
"with open(fl_name,'r') as fl:\n",
|
||
" m_xx = json.load(fl)\n",
|
||
"for k, v in m_xx.items():\n",
|
||
" m_bh = str(k).rjust(5,\"0\")\n",
|
||
" fl_name = f'file/220724/new/{m_bh}-{v[0]}.pdf'\n",
|
||
" fl = f'{m_bh}-{v[0]}.pdf'\n",
|
||
" m_rec = v[2]+'@ceic.com'\n",
|
||
" \n",
|
||
" from_addr = 'kmingedu@163.com' #发件邮箱\n",
|
||
" password = 'GKWUZXMVYKSSUSSL' #邮箱密码\n",
|
||
" smtp_server = 'smtp.163.com' #SMTP服务器,以新浪为例\n",
|
||
" server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口\n",
|
||
" msg = MIMEMultipart()\n",
|
||
" msg['Subject'] = Header(\"低碳清洁能源研究院体质监测报告\",'utf-8')\n",
|
||
" msg['From'] = Header('北京坤铭体质监测评估中心')\n",
|
||
" msg['To'] = Header(m_rec)\n",
|
||
"\n",
|
||
" from_addr = 'kmingedu@163.com' #发件邮箱\n",
|
||
" password = 'GKWUZXMVYKSSUSSL' #邮箱密码\n",
|
||
" to_addr = m_rec #收件邮箱\n",
|
||
" att1 =MIMEApplication(open(fl_name, 'rb').read())\n",
|
||
" #att1[\"Content-Type\"] = 'application/octet-stream'\n",
|
||
" # 这里的filename可以任意写,写什么名字,邮件中显示什么名字\n",
|
||
" att1.add_header('Content-Disposition','attachment',filename=fl)\n",
|
||
" msg.attach(att1)\n",
|
||
" try:\n",
|
||
" server.login(from_addr,password) #登录邮箱\n",
|
||
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
|
||
" server.quit\n",
|
||
" time.sleep(5)\n",
|
||
" print(f'{fl}邮件发送成功!')\n",
|
||
" except smtplib.SMTPException:\n",
|
||
" print (\"Error: 无法发送邮件\")\n",
|
||
" \n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 使用网易邮箱群发测试链接"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"from email.mime.text import MIMEText\n",
|
||
"from email.mime.multipart import MIMEMultipart\n",
|
||
"from email.mime.application import MIMEApplication\n",
|
||
"from email.header import Header\n",
|
||
"import smtplib\n",
|
||
"import requests\n",
|
||
"import time\n",
|
||
"import re\n",
|
||
"import json\n",
|
||
"import jwt\n",
|
||
"\n",
|
||
"key = \"Xixi1234\"\n",
|
||
"encoded = jwt.encode({\"email\": \"eygsoft@gmail.com\"}, key, algorithm='HS256')\n",
|
||
"#print(encoded)\n",
|
||
"\n",
|
||
"\n",
|
||
" \n",
|
||
"list1 = [\n",
|
||
" {'name':'lillianwong','E_mail':'lillianwong73@gmail.com'},\n",
|
||
" {'name':'杨玉冰','E_mail':'lkyyb@126.com'}]\n",
|
||
"\n",
|
||
"\n",
|
||
"for item in list1:\n",
|
||
" m_mail = item['E_mail']\n",
|
||
" m_name = item['name']\n",
|
||
" encoded = jwt.encode({\"email\": m_mail}, key, algorithm='HS256')\n",
|
||
" lianjie = f'https://www.forraid.com/survey/token/{encoded}/tcm0'\n",
|
||
" mail_msg = f\"\"\"\n",
|
||
"<p>欢迎参加北京坤铭体质监测评估中心中医体质检测</p>\n",
|
||
"<p><a href=\"{lianjie}\">点击参加测试</a></p>\n",
|
||
"\"\"\"\n",
|
||
" from_addr = 'kmingedu@163.com' #发件邮箱\n",
|
||
" password = 'GKWUZXMVYKSSUSSL' #邮箱密码\n",
|
||
" smtp_server = 'smtp.163.com' #SMTP服务器,以新浪为例\n",
|
||
" server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口\n",
|
||
" msg = MIMEText(mail_msg, 'html', 'utf-8')\n",
|
||
" msg['Subject'] = Header(\"中医体质检测测试链接\",'utf-8')\n",
|
||
" msg['From'] = Header('北京坤铭体质监测评估中心')\n",
|
||
" msg['To'] = Header(m_mail)\n",
|
||
"\n",
|
||
" \n",
|
||
" to_addr = m_mail #收件邮箱\n",
|
||
" try:\n",
|
||
" server.login(from_addr,password) #登录邮箱\n",
|
||
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
|
||
" server.quit\n",
|
||
" time.sleep(5)\n",
|
||
" print('邮件发送成功!')\n",
|
||
" except smtplib.SMTPException:\n",
|
||
" print (\"Error: 无法发送邮件\")\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"try:\n",
|
||
" server.login(from_addr,password) #登录邮箱\n",
|
||
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
|
||
" server.quit\n",
|
||
" time.sleep(5)\n",
|
||
" print(f'{fl}邮件发送成功!')\n",
|
||
" except smtplib.SMTPException:\n",
|
||
" print (\"Error: 无法发送邮件\")\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"toc-hr-collapsed": true,
|
||
"toc-nb-collapsed": true
|
||
},
|
||
"source": [
|
||
"# Twilio使用"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import os\n",
|
||
"from twilio.rest import Client\n",
|
||
"\n",
|
||
"\n",
|
||
"# Your Account Sid and Auth Token from twilio.com/console\n",
|
||
"# and set the environment variables. See http://twil.io/secure\n",
|
||
"account_sid = 'AC1aac8c18078bf371992fda0f924860c8'\n",
|
||
"auth_token = '956199d0f1b724d00ef8bb934fcaefe9'\n",
|
||
"client = Client(account_sid, auth_token)\n",
|
||
"\n",
|
||
"message = client.messages \\\n",
|
||
" .create(\n",
|
||
" body=\"I'm back.\",\n",
|
||
" from_='+12056066931',\n",
|
||
" to='+8613793180751'\n",
|
||
" )\n",
|
||
"\n",
|
||
"print(message.sid)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import time\n",
|
||
"\n",
|
||
"localtime = time.localtime(time.time())\n",
|
||
"#type(localtime)\n",
|
||
"print (\"本地时间为 :\", localtime)\n",
|
||
"jyr = '12345'\n",
|
||
"if time.strftime(\"%w\", time.localtime()) in jyr:\n",
|
||
" print('ok')\n",
|
||
"else:\n",
|
||
" print('今日不是交易日!')\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from email.mime.text import MIMEText\n",
|
||
"from email.header import Header\n",
|
||
"import smtplib\n",
|
||
"import requests\n",
|
||
"import time\n",
|
||
"import re\n",
|
||
"\n",
|
||
"def sendmail(message):\n",
|
||
" msg = MIMEText(message,'plain','utf-8')\n",
|
||
" msg['Subject'] = Header(\"外汇价格已经到达预期价位!\",'utf-8')\n",
|
||
" msg['From'] = Header('512song@sina.com')\n",
|
||
" msg['To'] = Header('songyi@yeah.net','utf-8')\n",
|
||
"\n",
|
||
" from_addr = '512song@sina.com' #发件邮箱\n",
|
||
" password = '409fe5d8471da663' #邮箱密码\n",
|
||
" to_addr = 'songyi@yeah.net' #收件邮箱\n",
|
||
" smtp_server = 'smtp.sina.com' #SMTP服务器,以新浪为例\n",
|
||
" server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口\n",
|
||
" server.login(from_addr,password) #登录邮箱\n",
|
||
" server.sendmail(from_addr,to_addr,msg.as_string()) #将msg转化成string发出\n",
|
||
" server.quit() \n",
|
||
" \n",
|
||
" \n",
|
||
"\n",
|
||
"pattern = re.compile(r'\\\"(.*)\\\"')\n",
|
||
"url = 'http://hq.sinajs.cn/list=USDCAD'\n",
|
||
"strhtml = requests.get(url)\n",
|
||
"data = strhtml.text\n",
|
||
"if pattern.findall(data):\n",
|
||
" for data1 in pattern.findall(data):\n",
|
||
" data2 = data1.split(',')\n",
|
||
"#print(data2)\n",
|
||
"with open('price.txt','r') as fl:\n",
|
||
" for line in fl:\n",
|
||
" p_high = line.split(',')[0]\n",
|
||
" p_low = line.split(',')[1]\n",
|
||
"m_message = '当前美元加元买入价:{}'.format(data2[1])\n",
|
||
"while time.strftime(\"%w\", time.localtime()) in '12345':\n",
|
||
" \n",
|
||
" print(p_high,p_low)\n",
|
||
" time.sleep(10)\n",
|
||
" strhtml = requests.get(url)\n",
|
||
" data = strhtml.text\n",
|
||
" if pattern.findall(data):\n",
|
||
" for data1 in pattern.findall(data):\n",
|
||
" data2 = data1.split(',')\n",
|
||
" if float(data2[1]) > float(p_high):\n",
|
||
" m_message = '当前美元加元买入价:{}'.format(data2[1])\n",
|
||
" sendmail(m_message)\n",
|
||
" p_high = str(float(p_high) + 0.04) \n",
|
||
" if float(data2[1]) > float(p_high):\n",
|
||
" m_message = '当前美元加元卖出价:{}'.format(data2[2])\n",
|
||
" p_low = str(float(p_low) - 0.04)\n",
|
||
" sendmail(m_message)\n",
|
||
" time.sleep(900)\n",
|
||
" "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {
|
||
"toc-hr-collapsed": true,
|
||
"toc-nb-collapsed": true
|
||
},
|
||
"source": [
|
||
"# AWS应用"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## AWS获取sns信息"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import boto3\n",
|
||
"\n",
|
||
"# Create an SNS client\n",
|
||
"sns = boto3.client('sns')\n",
|
||
"\n",
|
||
"# Call SNS to list topics\n",
|
||
"response = sns.list_topics()\n",
|
||
"\n",
|
||
"# Get a list of all topic ARNs from the response\n",
|
||
"topics = [topic['TopicArn'] for topic in response['Topics']]\n",
|
||
"\n",
|
||
"# Print out the topic list\n",
|
||
"print(\"Topic List: %s\" % topics)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## AWS操作DynamoDB"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import boto3\n",
|
||
"\n",
|
||
"# Get the service resource.\n",
|
||
"dynamodb = boto3.resource('dynamodb')\n",
|
||
"\n",
|
||
"# Create the DynamoDB table.\n",
|
||
"table = dynamodb.create_table(\n",
|
||
" TableName='waihui',\n",
|
||
" \n",
|
||
" AttributeDefinitions=[ \n",
|
||
" {\n",
|
||
" 'AttributeName': 'code',\n",
|
||
" 'AttributeType': 'S'\n",
|
||
" }\n",
|
||
" \n",
|
||
" \n",
|
||
" ],\n",
|
||
" KeySchema=[\n",
|
||
" {\n",
|
||
" 'AttributeName': 'code',\n",
|
||
" 'KeyType': 'HASH'\n",
|
||
" }\n",
|
||
" \n",
|
||
" ],\n",
|
||
" ProvisionedThroughput={\n",
|
||
" 'ReadCapacityUnits': 5,\n",
|
||
" 'WriteCapacityUnits': 5\n",
|
||
" }\n",
|
||
" \n",
|
||
")\n",
|
||
"\n",
|
||
"# Wait until the table exists.\n",
|
||
"table.meta.client.get_waiter('table_exists').wait(TableName='waihui')\n",
|
||
"\n",
|
||
"# Print out some data about the table.\n",
|
||
"print(table.item_count)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import boto3\n",
|
||
"import decimal\n",
|
||
"# Get the service resource.\n",
|
||
"dynamodb = boto3.resource('dynamodb')\n",
|
||
"\n",
|
||
"table = dynamodb.Table('waihui')\n",
|
||
"\n",
|
||
"table.put_item(\n",
|
||
" Item={\n",
|
||
" 'code': 'USDCAD',\n",
|
||
" 'high': Decimal('1.3200'),\n",
|
||
" 'low': Decimal('1.3000'),\n",
|
||
" }\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import boto3\n",
|
||
"# Get the service resource.\n",
|
||
"dynamodb = boto3.resource('dynamodb')\n",
|
||
"\n",
|
||
"table = dynamodb.Table('waihui')\n",
|
||
"\n",
|
||
"response = table.get_item(\n",
|
||
" Key={\n",
|
||
" 'code': 'USDCAD' \n",
|
||
" }\n",
|
||
")\n",
|
||
"item = response['Item']\n",
|
||
"print(item)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import boto3\n",
|
||
"# Get the service resource.\n",
|
||
"dynamodb = boto3.resource('dynamodb')\n",
|
||
"\n",
|
||
"table = dynamodb.Table('waihui')\n",
|
||
"\n",
|
||
"table.delete_item(\n",
|
||
" Key={\n",
|
||
" 'code': 'USDCAD' \n",
|
||
" }\n",
|
||
")\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import boto3\n",
|
||
"import decimal\n",
|
||
"# Get the service resource.\n",
|
||
"dynamodb = boto3.resource('dynamodb')\n",
|
||
"\n",
|
||
"table = dynamodb.Table('waihui')\n",
|
||
"table.update_item(\n",
|
||
" Key={\n",
|
||
" 'code': 'USDCAD'\n",
|
||
" },\n",
|
||
" UpdateExpression='SET low = :val1',\n",
|
||
" ExpressionAttributeValues={\n",
|
||
" ':val1': decimal.Decimal('1.2900')\n",
|
||
" }\n",
|
||
")\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import boto3\n",
|
||
"\n",
|
||
"# Create SQS client\n",
|
||
"sqs = boto3.client('sqs')\n",
|
||
"\n",
|
||
"queue_url = 'https://sqs.us-east-1.amazonaws.com/915521803346/MySqs1'\n",
|
||
"\n",
|
||
"# Receive message from SQS queue\n",
|
||
"response = sqs.receive_message(\n",
|
||
" QueueUrl=queue_url,\n",
|
||
" AttributeNames=[\n",
|
||
" 'SentTimestamp'\n",
|
||
" ],\n",
|
||
" MaxNumberOfMessages=1,\n",
|
||
" MessageAttributeNames=[\n",
|
||
" 'All'\n",
|
||
" ],\n",
|
||
" VisibilityTimeout=0,\n",
|
||
" WaitTimeSeconds=0\n",
|
||
")\n",
|
||
"\n",
|
||
"message = response['Messages'][0]\n",
|
||
"receipt_handle = message['ReceiptHandle']\n",
|
||
"\n",
|
||
"# Delete received message from queue\n",
|
||
"sqs.delete_message(\n",
|
||
" QueueUrl=queue_url,\n",
|
||
" ReceiptHandle=receipt_handle\n",
|
||
")\n",
|
||
"print('Received and deleted message: %s' % message)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# MongoDB系统GridFS文件管理"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 文件上传"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pymongo\n",
|
||
"from gridfs import GridFS\n",
|
||
"from bson.objectid import ObjectId\n",
|
||
"import os\n",
|
||
"\n",
|
||
"myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n",
|
||
"mydb = myclient[\"gaokao\"]\n",
|
||
"mycol = mydb[\"college\"]\n",
|
||
"\n",
|
||
"UploadCache = \"uploadcache\"\n",
|
||
"dbURL = \"mongodb://localhost:27017\"\n",
|
||
"\n",
|
||
"#上传文件\n",
|
||
"def upLoadFile(file_coll,file_name,data_link):\n",
|
||
" client = pymongo.MongoClient('mongodb://localhost:27017/')\n",
|
||
"\n",
|
||
" db = client[\"gaokao\"]\n",
|
||
"\n",
|
||
" filter_condition = {\"filename\": os.path.basename(file_name), \"url\": data_link}\n",
|
||
" gridfs_col = GridFS(db, collection=file_coll)\n",
|
||
" file_ = \"0\"\n",
|
||
" query = {\"filename\":\"\"}\n",
|
||
" query[\"filename\"] = file_name\n",
|
||
"\n",
|
||
" if gridfs_col.exists(query):\n",
|
||
" print('已经存在该文件')\n",
|
||
" else:\n",
|
||
"\n",
|
||
" with open(file_name, 'rb') as file_r:\n",
|
||
" file_data = file_r.read()\n",
|
||
" file_ = gridfs_col.put(data=file_data, **filter_condition) # 上传到gridfs\n",
|
||
"\n",
|
||
" print(file_)\n",
|
||
"\n",
|
||
"\n",
|
||
" return file_ \n",
|
||
"# 按文件名获取文档\n",
|
||
"def downLoadFile(self,file_coll,file_name,out_name,ver):\n",
|
||
" client = pymongo.MongoClient(self.dbURL)\n",
|
||
"\n",
|
||
" db = client[\"store\"]\n",
|
||
"\n",
|
||
" gridfs_col = GridFS(db, collection=file_coll)\n",
|
||
"\n",
|
||
" file_data = gridfs_col.get_version(filename=file_name, version=ver).read()\n",
|
||
"\n",
|
||
" with open(out_name, 'wb') as file_w:\n",
|
||
" file_w.write(file_data)\n",
|
||
"\n",
|
||
"# 按文件_Id获取文档 \n",
|
||
"def downLoadFilebyID(self,file_coll,_id,out_name):\n",
|
||
" client = pymongo.MongoClient(self.dbURL)\n",
|
||
"\n",
|
||
" db = client[\"store\"]\n",
|
||
"\n",
|
||
" gridfs_col = GridFS(db, collection=file_coll)\n",
|
||
"\n",
|
||
" O_Id = ObjectId(_id)\n",
|
||
"\n",
|
||
" gf = gridfs_col.get(file_id=O_Id)\n",
|
||
" file_data = gf.read()\n",
|
||
" with open(out_name, 'wb') as file_w:\n",
|
||
"\n",
|
||
" file_w.write(file_data) \n",
|
||
"\n",
|
||
"\n",
|
||
" return gf.filename \n",
|
||
"m_dir = './data/tmp'\n",
|
||
"fls=os.listdir(m_dir)\n",
|
||
"n = 0\n",
|
||
"for fl in fls:\n",
|
||
" #oldname=fl[n]\n",
|
||
" name, suffix = os.path.splitext(fl)\n",
|
||
" #if name in old:\n",
|
||
" # new_name = fi_path+ os.sep + fi_name[name]+suffix\n",
|
||
" # old_name = fi_path+ os.sep + fl[n]\n",
|
||
" # os.rename(old_name,new_name)\n",
|
||
" #print(os.path.basename(fl))\n",
|
||
" #print(fl,suffix[1:])\n",
|
||
" full_path = m_dir+ '/' + fl\n",
|
||
" upLoadFile(\"document\",full_path,\"\")\n",
|
||
"#a = MongoGridFS(\"\")\n",
|
||
"#a.upLoadFile(\"pdf\",\"MongoGridFS.py\",\"\")\n",
|
||
"#a.downLoadFile(\"pdf\",\"MongoGridFS.py\",\"out2.p\",2)\n",
|
||
"#ll = a.downLoadFilebyID(\"pdf\",\"5d70a5b283a3c5104cd39346\",\"out3.p\")\n",
|
||
"#print (ll)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pymongo\n",
|
||
"from gridfs import GridFS\n",
|
||
"from bson.objectid import ObjectId\n",
|
||
"import os\n",
|
||
"\n",
|
||
"myclient = pymongo.MongoClient('mongodb://localhost:27017/')\n",
|
||
"mydb = myclient[\"gaokao\"]\n",
|
||
"mycol = mydb[\"college\"]\n",
|
||
"\n",
|
||
"UploadCache = \"uploadcache\"\n",
|
||
"dbURL = \"mongodb://localhost:27017\"\n",
|
||
"\n",
|
||
"#上传文件\n",
|
||
"def upLoadFile(file_coll,file_name,data_link):\n",
|
||
" client = pymongo.MongoClient('mongodb://localhost:27017/')\n",
|
||
"\n",
|
||
" db = client[\"gaokao\"]\n",
|
||
"\n",
|
||
" filter_condition = {\"filename\": file_name, \"url\": data_link}\n",
|
||
" gridfs_col = GridFS(db, collection=file_coll)\n",
|
||
" file_ = \"0\"\n",
|
||
" query = {\"filename\":\"\"}\n",
|
||
" query[\"filename\"] = file_name\n",
|
||
"\n",
|
||
" if gridfs_col.exists(query):\n",
|
||
" print('已经存在该文件')\n",
|
||
" else:\n",
|
||
"\n",
|
||
" with open(file_name, 'rb') as file_r:\n",
|
||
" file_data = file_r.read()\n",
|
||
" file_ = gridfs_col.put(data=file_data, **filter_condition) # 上传到gridfs\n",
|
||
"\n",
|
||
" print(file_)\n",
|
||
"\n",
|
||
"\n",
|
||
" return file_ \n",
|
||
"# 按文件名获取文档\n",
|
||
"def downLoadFile(self,file_coll,file_name,out_name,ver):\n",
|
||
" client = pymongo.MongoClient(self.dbURL)\n",
|
||
"\n",
|
||
" db = client[\"store\"]\n",
|
||
"\n",
|
||
" gridfs_col = GridFS(db, collection=file_coll)\n",
|
||
"\n",
|
||
" file_data = gridfs_col.get_version(filename=file_name, version=ver).read()\n",
|
||
"\n",
|
||
" with open(out_name, 'wb') as file_w:\n",
|
||
" file_w.write(file_data)\n",
|
||
"\n",
|
||
"# 按文件_Id获取文档 \n",
|
||
"def downLoadFilebyID(file_coll,_id,out_name):\n",
|
||
" client = pymongo.MongoClient('mongodb://localhost:27017/')\n",
|
||
"\n",
|
||
" db = client[\"gaokao\"]\n",
|
||
"\n",
|
||
" gridfs_col = GridFS(db, collection=file_coll)\n",
|
||
"\n",
|
||
" O_Id = ObjectId(_id)\n",
|
||
"\n",
|
||
" gf = gridfs_col.get(file_id=O_Id)\n",
|
||
" file_data = gf.read()\n",
|
||
" with open(out_name, 'wb') as file_w:\n",
|
||
"\n",
|
||
" file_w.write(file_data) \n",
|
||
"\n",
|
||
"\n",
|
||
" return gf.filename \n",
|
||
"ll = downLoadFilebyID(\"pdf\",\"5fbf351b62452a56d7d16603\",\"out3.pdf\")\n",
|
||
"print (ll)\n",
|
||
"#a = MongoGridFS(\"\")\n",
|
||
"#a.upLoadFile(\"pdf\",\"MongoGridFS.py\",\"\")\n",
|
||
"#a.downLoadFile(\"pdf\",\"MongoGridFS.py\",\"out2.p\",2)\n",
|
||
"#ll = a.downLoadFilebyID(\"pdf\",\"5d70a5b283a3c5104cd39346\",\"out3.pdf\")\n",
|
||
"#print (ll)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# 腾讯文字识别"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import json\n",
|
||
"import types\n",
|
||
"from tencentcloud.common import credential\n",
|
||
"from tencentcloud.common.profile.client_profile import ClientProfile\n",
|
||
"from tencentcloud.common.profile.http_profile import HttpProfile\n",
|
||
"from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException\n",
|
||
"from tencentcloud.ocr.v20181119 import ocr_client, models\n",
|
||
"import base64\n",
|
||
" \n",
|
||
"cred = credential.Credential(\"AKIDoZHHEB2lHbluEZvN8uYHwcdvacqfmDeJ\",\"fEkr2VucwEQXXVN8jCd0CFBxdAe6Xny9\")\n",
|
||
"httpProfile = HttpProfile()\n",
|
||
"httpProfile.endpoint = \"ocr.tencentcloudapi.com\" \n",
|
||
"clientProfile = ClientProfile()\n",
|
||
"clientProfile.httpProfile = httpProfile \n",
|
||
"client = ocr_client.OcrClient(cred, \"ap-beijing\", clientProfile) \n",
|
||
"req = models.GeneralAccurateOCRRequest()\n",
|
||
"with open(\"001.jpg\",\"rb\") as f:\n",
|
||
" img_data = f.read()\n",
|
||
"img_base64 = base64.b64encode(img_data)\n",
|
||
"params = {\n",
|
||
" \"ImageBase64\": img_base64.decode('utf-8')\n",
|
||
"}\n",
|
||
"req.from_json_string(json.dumps(params))\n",
|
||
"\n",
|
||
"# 返回的resp是一个GeneralAccurateOCRResponse的实例,与请求对象对应\n",
|
||
"resp = client.GeneralAccurateOCR(req)\n",
|
||
"print(resp.to_json_string())\n",
|
||
"\n",
|
||
"#except TencentCloudSDKException as err:\n",
|
||
"# print(err)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pymupdf4llm\n",
|
||
"#md_text = pymupdf4llm.to_markdown(\"data/1782596-唐荣.pdf\")\n",
|
||
"llama_reader = pymupdf4llm.LlamaMarkdownReader()\n",
|
||
"llama_docs = llama_reader.load_data(\"data/1782596-唐荣.pdf\")\n",
|
||
"\n",
|
||
"print(llama_docs)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pymupdf4llm\n",
|
||
"md_text = pymupdf4llm.to_markdown(\"data/1782596-唐荣.pdf\")\n",
|
||
"#llama_reader = pymupdf4llm.LlamaMarkdownReader()\n",
|
||
"#llama_docs = llama_reader.load_data(\"data/1782596-唐荣.pdf\")\n",
|
||
"\n",
|
||
"print(md_text)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"execution": {
|
||
"iopub.execute_input": "2025-08-05T04:13:25.191718Z",
|
||
"iopub.status.busy": "2025-08-05T04:13:25.191013Z",
|
||
"iopub.status.idle": "2025-08-05T04:13:26.589724Z",
|
||
"shell.execute_reply": "2025-08-05T04:13:26.589155Z",
|
||
"shell.execute_reply.started": "2025-08-05T04:13:25.191654Z"
|
||
}
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"[{'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 1}, 'toc_items': [], 'tables': [], 'images': [{'number': 4, 'bbox': Rect(233.94000244140625, 713.0, 375.66998291015625, 854.72998046875), 'transform': (141.72999572753906, 0.0, -0.0, 141.72999572753906, 233.94000244140625, 713.0), 'width': 190, 'height': 190, 'colorspace': 3, 'cs-name': 'DeviceRGB', 'xres': 96, 'yres': 96, 'bpc': 8, 'size': 15730, 'has-mask': False}, {'number': 11, 'bbox': Rect(251.69000244140625, 279.6000061035156, 353.739990234375, 387.32000732421875), 'transform': (102.05000305175781, 0.0, -0.0, 107.72000122070312, 251.69000244140625, 279.6000061035156), 'width': 137, 'height': 145, 'colorspace': 3, 'cs-name': 'DeviceRGB', 'xres': 96, 'yres': 96, 'bpc': 8, 'size': 7001, 'has-mask': False}], 'graphics': [], 'text': '```\\n 医保卡号:\\n\\n 体检号:325031000089\\n 检查类型:在岗期间\\n\\n# **`南京江北医院`** **`职业健康检查表`**\\n\\n```\\n\\n#### `体检编号` `姓 名`\\n\\n\\n#### `325031000089` `唐荣`\\n\\n\\n#### `身 份 证 32011219771117****`\\n\\n\\n#### `用人单位`\\n\\n\\n```\\n南化公司苯化工部\\n\\n```\\n\\n#### `联系电话 13382785142`\\n\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 2}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '## **`职业健康检查表说明`**\\n\\n#### `一、本单位保证职业健康检查的科学性、公正性和准确性。` `二、本单位职业健康检查活动依据国家《职业健康检查管理办法》、《` `职业健康监护技术规范》等规定进行。` `三、本单位《江苏省职业健康检查机构备案回执》的编号:苏卫职检` `备字[2021]BG第016号` `四、本检查表涂改、增删无效,未加盖单位印章无效。` `五、未经本单位同意,不得部分复制本检查表。` `六、用人单位和劳动者应确保一般项目、职业史、接触的职业病危害` `因素、既往病史等项目的真实性。` `七、发现健康损害或者疑似职业病病人时,用人单位应根据本单位的` `主检意见及国家法律法规要求安排复查或医学观察或进行职业病` `诊断。` `八、对检查结果若有异议,可直接向本单位进行咨询。` `地址(Address):南京市化工园区葛关路552号` `邮政编码(Post Coad):210048` `电话(Tel):025-57067000`\\n\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 3}, 'toc_items': [], 'tables': [{'bbox': (57.689998626708984, 206.18099975585938, 562.260009765625, 297.70001220703125), 'rows': 2, 'columns': 6}, {'bbox': (57.689998626708984, 315.7010192871094, 562.260009765625, 367.9800109863281), 'rows': 2, 'columns': 5}], 'images': [], 'graphics': [], 'text': '```\\n 中华人民共和国预防性健康检查用表\\n\\n### **`有害作业人员健康检查表`**\\n\\n```\\n\\n```\\n单位名称:\\n\\n```\\n\\n```\\n南化公司苯化工部\\n\\n```\\n\\n```\\n1977年11月17日\\n\\n```\\n\\n```\\n姓 名: 唐荣 性 别:男\\n\\n```\\n\\n```\\n出生年月:\\n\\n```\\n\\n```\\n国 籍:中华人民共和国\\n\\n```\\n\\n```\\n民 族:汉族 婚 否: /\\n\\n```\\n\\n```\\n0 月 接害工龄:20 年 0 月\\n\\n```\\n\\n```\\n体检日期:\\n\\n```\\n\\n```\\n总 工 龄: 29 年 0 月 接害工龄:\\n\\n```\\n\\n```\\n年 0 月 接害工龄:20 年\\n\\n```\\n\\n```\\n2025年03月10日\\n\\n```\\n\\n```\\n29 0 20\\n\\n```\\n\\n```\\n接触有害因素:\\n\\n```\\n\\n```\\n苯,苯胺,硝基苯,硫酸及三氧化硫,硝酸,氮氧化物,氢氧化钠,氢气\\n\\n```\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n|一、职业史|Col2|Col3|Col4|Col5|Col6|\\n|---|---|---|---|---|---|\\n|`起止日期`|`工作单位`|`部门`|`工种`|` 有害因素种类、`<br>`名称`|`防护措施`|\\n|`2005-03-10-`<br>`至今`|`南化公司苯化工部`|`苯胺作业区`|`有机合成工`|`苯,苯胺,硝基苯,`<br>`硫酸及三氧化硫,`<br>`硝酸,氮氧化物,氢`<br>`氧化钠,氢气`|`口罩,手套,耳塞`|\\n\\n\\n\\n|二、既往病史|Col2|Col3|Col4|Col5|\\n|---|---|---|---|---|\\n|`疾病名称`|`诊断日期`|`诊断单位`|`治疗经过`|`转归`|\\n|`无`|`/`|`/`|`/`|`/`|\\n\\n```\\n三、月经史 初潮: / 岁 经期: / 天 周期: / 天 停经年龄: / 岁\\n\\n 是否经期: /\\n\\n四、生育史 现有子女 / 人、流产 / 次、早产/ 次、死产/ 次、异常胎/ 次\\n\\n五、烟酒史 现在每天吸 10 支/天、共 29 年;\\n\\n 不饮酒 / ml/日、共 / 年。\\n\\n六、其他 无特殊情况\\n\\n七、自觉症状\\n\\n症状 症状 症状 症状\\n\\n目前无不适症状\\n\\n问诊者: 录入日期:2025年03月10日\\n\\n 第1页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 4}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '```\\n 第4页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n八、临床\\n\\n体重视力检查\\n\\n项目 结果 项目 结果\\n\\n身高 173cm 体重 86kg\\n\\n体重指数(BMI) 28.73↑ 裸眼视力左 4.5\\n\\n裸眼视力右 4.5 矫正视力(左) \\n矫正视力(右) \\n检查者: 体检日期:2025年03月10日\\n\\n内科检查\\n\\n项目 结果 项目 结果\\n\\n肺 双肺呼吸音清晰,未闻及干湿性啰音 心律 正常\\n\\n杂音 正常 腹部压痛 正常\\n\\n心率 96次/分 内科其它 \\\\\\n\\n医生: 体检日期:2025年03月10日\\n\\n血压\\n\\n项目 结果 项目 结果\\n\\n收缩压 155mmHg↑ 脉搏 96次/分\\n\\n舒张压 99mmHg↑\\n\\n医生: 体检日期:2025年03月10日\\n\\n耳鼻喉科\\n\\n项目 结果 项目 结果\\n\\n扁桃体 扁桃体Ⅱ度 咽喉 慢性咽炎\\n\\n鼻腔 正常 听力(右) 正常\\n\\n听力(左) 正常 耳疾 无\\n\\n嗅觉 正常\\n\\n医生: 体检日期:2025年03月10日\\n\\n眼科常规检查\\n\\n项目 结果 项目 结果\\n\\n辨色力 正常 眼结膜 正常\\n\\n眼部病变 \\\\\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第2页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 5}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '```\\n 第5页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n医生: 体检日期:2025年03月10日\\n\\n外科检查\\n\\n项目 结果 项目 结果\\n\\n皮肤 未见明显异常 淋巴结 未见明显异常\\n\\n甲状腺 未见明显异常 四肢 未见明显异常\\n\\n脊椎 未见明显异常 腋下 未见明显异常\\n\\n指甲 未见明显异常 骨关节 未见明显异常\\n\\n外科其它 /\\n\\n医生: 体检日期:2025年03月10日\\n\\n口腔检查\\n\\n项目 结果 项目 结果\\n\\n口腔粘膜 正常 唇腭 正常\\n\\n舌体 正常 牙周 正常\\n\\n牙齿 龋齿、残根 口腔科其它 /\\n\\n医生: 体检日期:2025年03月10日\\n\\n神经科\\n\\n项目 结果 项目 结果\\n\\n膝腱反射 正常反射 病理反射 未引出\\n\\n肌力 Ⅴ级 三颤 阴性\\n\\n皮肤划痕症 阴性 跟腱反射 正常反射\\n\\n前庭功能检查 阴性 肌张力 阴性\\n\\n共济运动 未见明显异常 感觉异常 未见明显异常\\n\\n运动功能 未见明显异常\\n\\n医生: 体检日期:2025年03月10日\\n\\n尿常规\\n\\n项目 结果 项目 结果\\n\\n结晶 0.00/μl 尿白细胞脂酶(LEU) 阴性Cell/uL\\n\\n医生: 体检日期:2025年03月10日\\n\\n九、器械类检查\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第3页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 6}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '```\\n 第6页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n彩超\\n\\n项目 结果\\n\\n彩超(双肾) 左肾强光点多个\\n\\n彩超(甲状腺) 甲状腺右叶囊性结节一个,大小约3.0*1.8*2.3毫米,TI-RADS 2类\\n\\n彩超(前列腺) 前列腺大小约44*33毫米,内见部分增强光斑(前列腺稍大伴部分钙化)\\n\\n肝 轻-中度脂肪肝;肝内低回声区一个,大小约10*10毫米,考虑低脂区可能\\n\\n胆囊 未见明显异常\\n\\n胰 未见明显异常\\n\\n脾 未见明显异常\\n\\n```\\n\\n```\\n小结:\\n\\n```\\n\\n```\\n彩超(双肾):左肾强光点多个;彩超(甲状腺):甲状腺右叶囊性结节一个,大小约3.0*1.8*2.3毫米,T\\nI-RADS\\n2类;彩超(前列腺):前列腺大小约44*33毫米,内见部分增强光斑(前列腺稍大伴部分钙化);肝\\n:轻-中度脂肪肝;肝内低回声区一个,大小约10*10毫米,考虑低脂区可能。\\n\\n```\\n\\n```\\n医生: 体检日期:2025年03月10日\\n\\n心电图\\n\\n项目 结果\\n\\n心电图 窦性心律;\\n\\n 小结: 窦性心律\\n\\n医生: 体检日期:2025年03月10日\\n\\n肺功能\\n\\n项目 结果 参考值\\n\\nFVC% 80.1 % ≥80\\n\\nFEV1% 81.7 % ≥70\\n\\nFEV1/FVC% 90.07 % 70-100\\n\\n 小结: 无明显异常\\n\\n检查者: 体检日期:2025年03月10日\\n\\n胸部平扫CT\\n\\n项目 结果\\n\\n胸部平扫CT 胸廓对称,纵隔气管居中。两侧肋骨走行自然,胸壁肌间隙清晰,胸壁软组织形态如常,未\\n 见异常密度影。右肺中叶外侧段(IM35)、左肺上叶前段(IM18、IM20)、左肺上叶下舌段\\n (IM41)见多发实性小结节,较大者位于右肺中叶外侧段(IM35),大小约为5mm×4mm。余\\n 肺未见异常密度影。两侧肺门未见增大。气管、支气管通畅。胸腺区呈脂肪密度影,未见增\\n 宽。两侧肺门及纵隔内未见明显肿大淋巴结影。两侧胸腔未见积液影,两侧胸膜未见增厚。\\n 心脏形态、大小如常,主动脉壁见钙化影。所及肝实质密度稍减低。\\n\\n 小结:\\n\\n医生: 体检日期:2025年03月10日\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第4页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 7}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '```\\n 第7页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n十、化验室项目\\n\\n血常规\\n\\n项目 结果 参考值 计量单位 项目 结果 参考值 计量单位\\n\\n白细胞计数 7.1 3.5-9.5 10^9/L 红细胞计数 4.70 4.3-5.8 10^12/L\\n\\n血红蛋白 139.00 130-175 g/L 红细胞压积 42.1 40-50 %\\n\\n红细胞平均体积 89.50 82-100 fL 平均血红蛋白量 29.70 27.00-34.00 pg\\n\\n平均血红蛋白浓度 330.00 316-354 g/L 血小板计数 340.00 125-350 10^9/L\\n\\n淋巴细胞百分数 34.40 20-50 % 淋巴细胞绝对值 2.44 1.1-3.2 10^9/L\\n\\n中性粒细胞绝对值 4.11 1.8-6.3 10^9/L 中性粒细胞百分数 57.90 40-75 %\\n\\n血小板比积 0.33↑ 0.11-0.28 % 红细胞分布宽度(SD) 44.10 39-46 fl\\n\\n平均血小板体积 9.80 6.00-14.00 fL 血小板分布宽度 16.40 9.00-18.00 fl\\n\\n单核细胞绝对值 0.38 0.1-0.6 10^9/L 单核细胞百分数 5.40 3.0-10.0 %\\n\\n嗜酸性粒细胞 0.15 0.02-0.52 10^9/L 嗜碱性粒细胞 0.01 0-0.06 10^9/L\\n\\n嗜酸性粒细胞百分数 2.10 0.5-5 % 嗜碱性粒细胞百分数 0.20 0-1 %\\n\\n检验员: 复核员: 报告日期: 2025年03月10日\\n\\n尿常规\\n\\n项目 结果 参考值 计量单位 项目 结果 参考值 计量单位\\n\\n尿维生素C +3 阴性 mmol/L 尿比重(SG) 1.030↑ 1.003-1.03\\n\\n尿胆原(URO) 正常 正常 umol/L 尿胆红素 阴性 阴性 umol/L\\n\\n尿酮体(KET) 阴性 阴性 mmol/L 尿隐血(BLD) +- 阴性 Cell/ul\\n\\n尿蛋白(PRO) +1 0.03-0.14 g/L 亚硝酸盐 阴性 阴性\\n\\n尿葡萄糖(GLU) 阴性 阴性 mmol/L 尿酸碱度测定 5.00 4.60-8.00\\n\\n微白蛋白 150.00↑ 0.00-20.00 mg/L 尿钙 1.00↓ 2.50-7.50 mmol/L\\n\\n尿肌酐 17.60 2.00-22.00 mmol/L 尿红细胞 2.50 0-10 /μl\\n\\n透明度 透明 清晰透明 鳞状上皮 0.00 0-23 /μl\\n\\n非鳞状上皮细胞 0.00 0-3 /uL 草酸钙结晶 0.00 0-10 /ul\\n\\n颜色 淡黄色 淡黄色 管型 0.00 0-1 /ul\\n\\n透明管型 0.00 0-1 /μl 细菌 0.00 0-33 /ul\\n\\n酵母菌 0.00 0-0 粘液丝 +- 0-118 /ul\\n微量蛋白/肌酐(ACR +1 正常 尿酸结晶 0.00 0-3 /ul\\n)\\n\\n尿白细胞 阴性 阴性 Cell/uL\\n\\n检验员: 复核员: 报告日期: 2025年03月10日\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第5页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 8}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '```\\n 第8页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n生化\\n\\n项目 结果 参考值 计量单位 项目 结果 参考值 计量单位\\n\\n谷丙转氨酶 24 9-50 U/L 谷草转氨酶 17 15-40 U/L\\n\\n总胆红素 3.1 0-26 μmol/L 总蛋白 80.9 65-85 g/L\\n\\n白蛋白 48.4 40-55 g/L 球蛋白 32.5 20-45 g/L\\n\\nγ-谷氨酰转肽酶 48 10-60 U/L 肌酐 75 57-97 μmol/L\\n\\n尿素氮 5.2 2.76-8.07 mmol/L 尿酸 384.0 202.3-416.5 μmol/L\\n\\n总胆固醇 5.49↑ 0-5.2 mmol/L 甘油三酯 5.32↑ 0-1.7 mmol/L\\n\\n低密度脂蛋白 3.07 0-4.12 mmol/L 高密度脂蛋白 0.88↓ 1-2.0 mmol/L\\n\\n葡萄糖 5.70 3.89-6.1 mmol/L\\n\\n检验员: 复核员: 报告日期: 2025年03月10日\\n\\n甲状腺功能\\n\\n项目 结果 参考值 计量单位 项目 结果 参考值 计量单位\\n游离三碘甲状腺原氨 5.79 3.1-6.8 pmol/L 游离甲状腺素 14.91 12-22 pmol/L\\n酸\\n\\n促甲状腺激素 4.95↑ 0.27-4.2 uIU/ml\\n\\n检验员: 复核员: 报告日期: 2025年03月10日\\n\\n肿瘤标志物\\n\\n项目 结果 参考值 计量单位 项目 结果 参考值 计量单位\\n\\n癌胚抗原 3.47 0-4.7 ng/ml 甲胎蛋白 3.60 0-7.0 ng/ml\\n\\n检验员: 复核员: 报告日期: 2025年03月10日\\n\\n糖化血红蛋白(HbAIC)\\n\\n项目 结果 参考值 计量单位 项目 结果 参考值 计量单位\\n\\n糖化血红蛋白测定(H\\n 6.05↑ 4-6.0 %\\nbAIC)\\n\\n检验员: 复核员: 报告日期: 2025年03月10日\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第6页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 9}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '```\\n 第9页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n幽门螺杆菌抗体\\n\\n项目 结果 参考值 计量单位 项目 结果 参考值 计量单位\\n\\n```\\n\\n```\\n幽门螺杆菌尿素酶抗\\n体检测\\n\\n```\\n\\n```\\n弱阳性(±\\n)\\n\\n```\\n\\n```\\n检验员: 复核员: 报告日期: 2025年03月11日\\n\\n十一、检查结论\\n\\n 检查结果:\\n (1)[体重视力检查]:体重指数偏高:28.73;裸眼视力左:4.5;裸眼视力右:4.5;\\n (2)[血压]:收缩压偏高:155mmHg;舒张压偏高:99mmHg;\\n (3)[耳鼻喉科]:扁桃体:扁桃体Ⅱ度;咽喉:慢性咽炎;\\n (4)[口腔检查]:牙齿:龋齿、残根;\\n (5)[彩超]:彩超(双肾):左肾强光点多个;彩超(甲状腺):甲状腺右叶囊性结节一个,大小约3.0*1.8*2.3\\n 毫米,TI-RADS\\n 2类;彩超(前列腺):前列腺大小约44*33毫米,内见部分增强光斑(前列腺稍大伴部分钙化);肝:轻 中度脂肪肝;肝内低回声区一个,大小约10*10毫米,考虑低脂区可能;\\n (6)[心电图]:窦性心律;\\n (7)[尿常规]:尿隐血(BLD):+-;尿蛋白(PRO):+1;微白蛋白偏高:150.00mg/L;尿钙偏低:1.00mmo\\n l/L;微量蛋白/肌酐(ACR):+1;\\n (8)[生化]:总胆固醇偏高:5.49mmol/L;甘油三酯偏高:5.32mmol/L;高密度脂蛋白偏低:0.88mmol/L;\\n (9)[甲状腺功能]:促甲状腺激素偏高:4.95uIU/ml;\\n (10)[胸部平扫CT]:胸部CT平扫:\\n 1、两肺多发微小结节,建议年度随访复查;\\n 2、主动脉硬化。\\n 附见:轻度脂肪肝;\\n (11)[糖化血红蛋白(HbAIC)]:糖化血红蛋白测定(HbAIC)偏高:6.05%;\\n (12)[幽门螺杆菌抗体]:幽门螺杆菌尿素酶抗体检测:弱阳性(±);\\n 其余所检项目未见明显异常。\\n\\n 主检结论:\\n 本次职业健康检查发现除目标疾病以外的其他疾病或某项指标异常。\\n 建议定期复查。\\n\\n 健康建议:\\n 1、糖化血红蛋白测定(HbAIC)偏高:\\n 糖化血红蛋白是血糖检查最常用的监测指标,能反应近2-3个月的平均血糖水平,因此,也是监测糖尿病血\\n 糖控制水平的指标\\n\\n 2、微白蛋白偏高:150.00:\\n 建议注意休息,多饮水,必要时肾内科就诊\\n\\n 3、尿蛋白(PRO):+1:\\n 尿内出现蛋白称为蛋白尿。引起蛋白尿的原因较多:剧烈运动、发热、寒冷、精神紧张时可出现暂时性蛋\\n 白尿,属于生理性蛋白尿。病理性蛋白尿多由急性肾炎、糖尿病肾病、系统性红斑狼疮、肾小管受炎症或\\n 药物刺激引起,膀胱炎、尿道炎、尿道出血及尿液内混入阴道分泌物也可出现假性蛋白尿。建议您肾内科\\n 专科就诊。\\n\\n 4、甲状腺右叶囊性结节:\\n 建议门诊内分泌科或甲乳外科诊疗。\\n\\n 5、两肺多发微小结节:\\n 建议定期复查\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第7页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 10}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '```\\n 第10页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n 6、促甲状腺激素偏高:\\n 建议内分泌科诊疗。\\n\\n 7、高密度脂蛋白偏低:\\n 当发生HDL降低时,动脉血管壁胆固醇沉积的机会增加,导致血管硬化,诱发冠心病,定期复查。\\n\\n 8、轻-中度脂肪肝:\\n 肝脏脂肪含量高于5%称为脂肪肝,引起脂肪肝的主要原因有:营养失调(营养过量)、饮酒、糖尿病、高\\n 脂血症、中毒和药物等。脂肪肝是可逆性的,合理饮食、运动及治疗后可恢复。\\n 建议:①低脂饮食,少吃动物内脏,多进食蔬菜、水果 ②严格限酒,适当运动\\n ③定期复查彩超及血脂,必要时肝病科诊疗。\\n\\n 9、甘油三酯偏高:\\n 甘油三酯测定是脂类代谢的重要指标之一。采血前2-3天尽可能少食含脂质类的食物,空腹12小时抽血,以\\n 排除和减少饮食的影响。血清甘油三脂水平受年龄、性别和饮食的影响。甘油三酯的增高与冠心病的发生\\n 有着重要的相关性。增高见于家族性高甘油三酯血症、饮食大量甘油三酯和继发于某些疾病如:糖尿病、\\n 甲状腺功能减退、肾病综合征、动脉硬化病等。\\n 建议:低脂饮食,多进食蔬菜、水果,增加体育锻炼;明显增高者,在医师指导下使用降脂药物。心内科门\\n 诊定期复查。\\n\\n 10、总胆固醇偏高:\\n 总胆固醇测定主要反映体内胆固醇的代谢情况,血清胆固醇受遗传、饮食、季节、生活方式、性别、年龄\\n 和环境诸多因素的影响,需多次检测并动态观察。\\n 建议\\n 1.胆固醇增高:见于脂肪肝、肝脏肿瘤、动脉粥样硬化、糖尿病、肾病综合症、甲状腺功能减退、阻塞性\\n 黄疸、原发性高胆固醇血症及高脂血症等。\\n 2.明显增高者,在医师指导下使用降脂药物治疗。\\n 3.低胆固醇饮食,少食动物内脏、蛋黄、蟹黄等食物,定期复查。\\n\\n 11、肝内低回声区:\\n 建议消化内科诊疗\\n\\n 12、体重指数偏高:\\n 体重指数(BMI)--即体重(公斤)除以身高(米)的平方,BMI正常是18.5~24.9。24.9~29.9\\n 视为超重;>30 视为肥胖。\\n 建议:①合理控制饮食量,合理搭配饮食,低盐、低脂和低糖饮食。②长期坚持体育锻炼,坚持自测体重\\n\\n 。\\n\\n 13、收缩压偏高:\\n 建议心血管内科专科诊疗\\n\\n 14、左肾强光点:\\n 建议:①多饮水排尿,多吃新鲜蔬菜水果,少吃油腻辛辣食物,多做下蹲动作。②定期复查彩超。\\n\\n 15、舒张压偏高:\\n 建议心血管内科专科诊疗\\n\\n 16、主动脉硬化:\\n 建议心内科诊疗\\n\\n 17、前列腺稍大:\\n 1.多吃新鲜蔬菜、水果,忌辛辣刺激性食物,忌酒。2.尽可能少骑自行车,忌长时间憋尿。3.保持心情舒\\n 畅,避免过度劳累,适度进行体育活动。建议定期复查彩超。\\n\\n 主检医师(签字):\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第8页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 11}, 'toc_items': [], 'tables': [], 'images': [{'number': 4, 'bbox': Rect(377.6499938964844, 142.2300262451172, 519.3800048828125, 283.96002197265625), 'transform': (141.72999572753906, 0.0, -0.0, 141.72999572753906, 377.6499938964844, 142.2300262451172), 'width': 190, 'height': 190, 'colorspace': 3, 'cs-name': 'DeviceRGB', 'xres': 96, 'yres': 96, 'bpc': 8, 'size': 15730, 'has-mask': False}, {'number': 3, 'bbox': Rect(355.3299865722656, 96.88002014160156, 463.04998779296875, 139.4000244140625), 'transform': (107.72000122070312, 0.0, -0.0, 42.52000045776367, 355.3299865722656, 96.88002014160156), 'width': 145, 'height': 58, 'colorspace': 3, 'cs-name': 'DeviceRGB', 'xres': 96, 'yres': 96, 'bpc': 8, 'size': 6109, 'has-mask': False}], 'graphics': [], 'text': '```\\n 第11页 共12页\\n\\n 姓名: 唐荣 性别: 男 年龄:47 体检编号:325031000089 体检日期: 2025-03-10\\n\\n备注:请仔细阅读体检总检和体检报告!!!\\n\\n 第9页\\n\\n```\\n\\n', 'words': []}, {'metadata': {'format': 'PDF 1.5', 'title': '', 'author': 'FastReport', 'subject': 'FastReport PDF export', 'keywords': '', 'creator': '', 'producer': '', 'creationDate': 'D:20250628093605', 'modDate': 'D:20250628093605', 'trapped': '', 'encryption': None, 'file_path': 'data/1782596-唐荣.pdf', 'page_count': 12, 'page': 12}, 'toc_items': [], 'tables': [], 'images': [], 'graphics': [], 'text': '', 'words': []}]\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from pathlib import Path\n",
|
||
"import json\n",
|
||
"import shutil\n",
|
||
"import pymupdf4llm\n",
|
||
"#md_text = pymupdf4llm.to_markdown(\"data/1782596-唐荣.pdf\")\n",
|
||
"#llama_reader = pymupdf4llm.LlamaMarkdownReader()\n",
|
||
"llama_docs = pymupdf4llm.to_markdown(\"data/1782596-唐荣.pdf\",page_chunks=True)\n",
|
||
"print(llama_docs)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"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.12.3"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|