Files
jupyter/文件操作.ipynb
2025-08-13 20:36:47 +08:00

75 KiB

数字文件名转换为文本文件名

In [ ]:
import os,sys,shutil
import openpyxl
import math

fi_xls = os.getcwd()+'/file/北海石化监测花名册2022 .xlsx'
fi_name = {}
fi_path = os.getcwd()+'/file/221103'
old = []
new = []
dict1 = {}

wb = openpyxl.load_workbook(fi_xls)
sheet = wb.active
depart = []
for n in range(2,sheet.max_row+1):
    if sheet.cell(n,3).value is not None: 
        m_name = sheet.cell(n,6).value.strip()
        m_depart = sheet.cell(n,3).value.strip()           
        depart.append(m_depart)    
        dict1[int(sheet.cell(n,4).value)] = [m_name,m_depart]
    #print()
# 创建部门办公室    
m_path = os.getcwd()+'/file/221103/new'
for pn in depart:
    if not os.path.exists(m_path + '/' + pn):
        os.mkdir(m_path + '/' + pn)
#print(dict1)


fl=os.listdir(fi_path)
for fn in fl:
    if os.path.isfile(fi_path + '/' + fn):
        ofn = int(fn.split('.')[0])
        old.append(ofn)
    #print(fn)
old.sort()
    #print(str(nfn)+'.pdf')

for n in old:
    
    o_name = f'{fi_path}/{n}.pdf'
    n_name = f'{fi_path}/new/{dict1[n][1]}/{str(n).rjust(5,"0")}-{dict1[n][0]}.pdf'
    if not os.path.exists(n_name):
        shutil.copyfile(o_name,n_name)
        print(n_name)
#print(old)

#print(dict1)

目录文件按照文件名排序

In [ ]:

import os,sys


fi_xls = 'test1.xlsx'
fi_name = {}
#fi_path = 'drive/My Drive/Colab Notebooks'+'/data'
fi_path = os.getcwd()+'/data'
old = []
new = []

fl=os.listdir(fi_path)
fl.sort()
n = 0
for i in fl:
    oldname=fl[n]
    name, suffix = os.path.splitext(oldname)
    if name in old:
        new_name = fi_path+ os.sep + fi_name[name]+suffix
        old_name = fi_path+ os.sep + fl[n]
        os.rename(old_name,new_name)
    n+= 1
fl

将pdf文件转为图片

In [ ]:
from pdf2image import convert_from_path, convert_from_bytes
import os,sys
import tempfile
from pdf2image.exceptions import (
    PDFInfoNotInstalledError,
    PDFPageCountError,
    PDFSyntaxError
)
#images = convert_from_path('1.pdf',dpi=200,fmt='jpg', output_folder='./sample_data')
with tempfile.TemporaryDirectory() as path:
    images_from_path = convert_from_path('./data/普通高等学校本科专业目录.pdf', dpi=300,fmt='jpg', output_folder='./data/pic')
print(path)

新建二维码图片pdf文件

In [ ]:
from fpdf import FPDF
import warnings


warnings.filterwarnings("ignore")
pdf = FPDF()
# compression is not yet supported in py3k version
pdf.compress = False
pdf.add_page()
# Unicode is not yet supported in the py3k version; use windows-1252 standard font
pdf.add_font('ali-regular', '', r"fonts/AlibabaPuHuiTi-2-55-Regular.ttf", uni=True)
pdf.set_font('ali-regular', '', 14)  
#pdf.ln(10)
#pdf.write(5, '欢迎')
pdf.text(20,280,'欢迎来到中国,中国欢迎您!')
pdf.image("data/water/平和体质.png", 50, 250,20)

pdf.output('py3k.pdf', 'F')

图像文件夹打包

In [ ]:
import zipfile
from pdf2image import convert_from_path, convert_from_bytes
import os,sys
import tempfile
import shutil
import time

from pdf2image.exceptions import (
    PDFInfoNotInstalledError,
    PDFPageCountError,
    PDFSyntaxError
)
def compress_file(zipfilename, dirname):      # zipfilename是压缩包名字,dirname是要打包的目录
    if os.path.isfile(dirname):
        with zipfile.ZipFile(zipfilename, 'w') as z:
            z.write(dirname)
    else:
        with zipfile.ZipFile(zipfilename, 'w') as z:
            for root, dirs, files in os.walk(dirname):
                for single_file in files:
                    if single_file != zipfilename:
                        filepath = os.path.join(root, single_file)
                        z.write(filepath)

def addfile(zipfilename, dirname):
    if os.path.isfile(dirname):
        with zipfile.ZipFile(zipfilename, 'a') as z:
            z.write(dirname)
    else:
        with zipfile.ZipFile(zipfilename, 'a') as z:
            for root, dirs, files in os.walk(dirname):
                for single_file in files:
                    if single_file != zipfilename:
                        filepath = os.path.join(root, single_file)
                        z.write(filepath)

#images = convert_from_path('1.pdf',dpi=200,fmt='jpg', output_folder='./sample_data')
def make_path(p):
    if os.path.exists(p):       # 判断文件夹是否存在
        shutil.rmtree(p)        # 删除文件夹
    os.mkdir(p)    
pdf_file = '2.pdf'
output_folder='./pic1'
zip_file = 'ribenweiqishihua.zip'
make_path(output_folder)
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
with tempfile.TemporaryDirectory() as path:
    images_from_path = convert_from_path(pdf_file, dpi=300,fmt='jpg', output_folder=output_folder)
compress_file(zip_file, output_folder)      # 执行函数
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
In [ ]:
from opencc import OpenCC

cc = OpenCC('t2s')
cc.convert("此亦寶力菱成上所不可缺者兹舉其基本變化十")

PDF文本替换

In [ ]:
import fitz
doc = fitz.open("data/19524.pdf")
page = doc.load_page(0)
# 遍历文本块,找到对应的文本块
def find_textbox(page:fitz.Page,keyword:str)->dict:
	info = page.get_text('dict')
	for block in info['blocks']:
		for line in block['lines']:
			for span in line['spans']:
				text = span.get('text','').replace(' ','')
				if text == keyword:
					return span
target = find_textbox(page,'北海炼化员工健康提示卡')
page.add_redact_annot(target['bbox'],'青海炼化员工健康提示卡',fontname='china-s',fontsize=40)
page.apply_redactions()
doc.save("19524.pdf")

文本文件操作

基本读取

In [ ]:
import re
file_name = 'data/2012.txt'
with open(file_name,'r') as fl,open('new_2012_1.txt','w') as fl1:
    for l in fl:
        l = re.sub('[\r\n\f ]{1,}', '', l)
        if l.split():
            print(l)
            fl1.write(l)

读取csv文件

In [ ]:
import csv
import re

filename = 'data/130.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        print(line)

读取分隔符分割文件,导入MongoDB

In [ ]:
import pymongo
import re
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient["gaokao"]
mycol = mydb["city"]
m_mongo = {}
m_xx = []
fl_name = 'china-city-list.txt'
n = 0
with open(fl_name,'r') as fl:
    for l in fl:
        n += 1
        if n >6:
            m_mongo = {}
            m_xx = re.sub('[ ]{1,}', '', l).split('|')
            #print(m_xx[1],m_xx[3],m_xx[8],m_xx[10])
            m_mongo['name'] = m_xx[3]
            m_mongo['code'] = m_xx[1]
            m_mongo['sheng'] = m_xx[8]
            m_mongo['shi'] = m_xx[10]
            m_mongo['jing'] = m_xx[11]
            m_mongo['wei'] = m_xx[12]
            mycol.insert_one(m_mongo) 
            #print(m_mongo)
print('ok!')

整理文件

In [ ]:
import re
file_name = 'file/三国演义.txt'
list1 = []
with open(file_name,'r') as fl:
    for l in fl:
        if len(l.strip())>0:
            list1.append(l.strip()+'\n')
with open('file/三国演义_new.txt','w') as fl1:
    fl1.writelines(list1)

读取html文件

In [ ]:
from bs4 import BeautifulSoup
import re
from pathlib import Path

def get_html_title(html_file_path):
    with open(html_file_path, 'r', encoding='utf-8') as f:
        html_content = f.read()
    
    soup = BeautifulSoup(html_content, 'html.parser')
    title_tag = soup.title
    
    if title_tag and hasattr(title_tag, 'string'):
        return title_tag.string.strip()
    else:
        return None  # 标签不存在或内容为空


path = Path('./file/guzi')
markdown_content = []
files = [file for file in path.iterdir() if file.is_file()]
sorted_files = sorted(files, key=lambda f: f.name)
print(type(sorted_files))
for file in sorted_files:
    if file.suffix=='.html':
        markdown_content.append('## '+get_html_title(file))
        with open(file, 'r', encoding='utf-8') as f:
            html_content = f.read()            
            soup = BeautifulSoup(html_content, 'html.parser')
            div = soup.find('div', class_="show-content")
            p_elements = div.find_all('p')            
            for div in p_elements:
                markdown_content.append(div.get_text(strip=True))
                #markdown_content.append('\n')
    if file.suffix=='.md':
        with open(file, 'r', encoding='utf-8') as f:
            txt_content = f.read()
            lines = txt_content.splitlines()
            for line in lines:
                line = line.strip()
                markdown_content.append(line)
                
markdown_content = '\n'.join(markdown_content)
with open('guzi.md', 'w', encoding='utf-8') as file:
    file.write(markdown_content)
In [ ]:
from bs4 import BeautifulSoup
import re
from pathlib import Path


def get_html_title(html_file_path):
    with open(html_file_path, 'r', encoding='utf-8') as f:
        html_content = f.read()
    
    soup = BeautifulSoup(html_content, 'html.parser')
    title_tag = soup.title
    
    if title_tag and hasattr(title_tag, 'string'):
        return title_tag.string.strip()
    else:
        return None  # 标签不存在或内容为空


file='file/guzi/1-01.html'
markdown_content = []
markdown_content.append('## '+get_html_title(file))
with open(file, 'r', encoding='utf-8') as f:
    html_content = f.read()
    
    soup = BeautifulSoup(html_content, 'html.parser')
    div = soup.find('div', class_="show-content")
    p_elements = div.find_all('p')
    
    for div in p_elements:
        markdown_content.append(div.get_text(strip=True))
        markdown_content.append('\n')
markdown_content = '\n'.join(markdown_content)
with open('1-01.md', 'w', encoding='utf-8') as file:
    file.write(markdown_content)

Excel文件修改

In [ ]:
import openpyxl
import json

filename = 'data/122.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
dict2 = {}
for k, v in dict1.items():
    for item in v:
        bh = item['avatar_id']
        dict2[bh] = item
print(dict2)        
    
wb = openpyxl.load_workbook('data/济南炼化职工分组表.xlsx')
sheet = wb.active
person = {}
for n in range(2, sheet.max_row+1):
    if sheet.cell(n, 14).value is not None and sheet.cell(n, 14).value in dict2.keys():
        code = sheet.cell(n, 14).value
        sheet[f'F{n}']=dict2[code]['birth']
wb.save('data/济南炼化职工分组表1.xlsx') 
print('ok!')    

Excel文件内容生成markdown格式文本

In [ ]:
import openpyxl

fi_xls = 'data/对局目录.xlsx'

wb = openpyxl.load_workbook(fi_xls)
sheet = wb['卷18'] 


for n in range(sheet.max_row - 1,sheet.max_row+1):    
    print('## 第'+sheet.cell(n,1).value+'局  ')
    print(sheet.cell(n,2).value+'  ')
    print(sheet.cell(n,3).value+'  ')
    print('共'+sheet.cell(n,4).value+'着   ')
    if sheet.cell(n,5).value is not None:
        print(sheet.cell(n,5).value+'  ')
    print(sheet.cell(n,6).value+'  ')
    print('\n')
In [ ]:
import openpyxl

fi_xls = 'data/对局目录.xlsx'

wb = openpyxl.load_workbook(fi_xls)
sheet = wb['卷24'] 


for n in range(50,562):    
    print(sheet.cell(n,1).value+'  ')
    if sheet.cell(n,2).value is not None:
        print(sheet.cell(n,2).value+'  ')
    if sheet.cell(n,3).value is not None:
        print(sheet.cell(n,3).value+'  ')
    print('\n')
In [ ]:
import openpyxl

fi_xls = 'data/对局目录.xlsx'

wb = openpyxl.load_workbook(fi_xls)
sheet = wb['卷22'] 


for n in range(2,sheet.max_row+1):    
    print('## 第'+sheet.cell(n,1).value+'局  ')
    print('第'+sheet.cell(n,2).value+'局  ')
    print('共'+sheet.cell(n,3).value+'着   ')
    print(sheet.cell(n,4).value+'  ')
    print(sheet.cell(n,5).value+'  ')
    print('\n')
In [ ]:
import openpyxl

fi_xls = 'data/对局目录.xlsx'

wb = openpyxl.load_workbook(fi_xls)
sheet = wb['卷24'] 


for n in range(50,562):    
    #print(sheet.cell(n,1).value+'  ')
    if sheet.cell(n,2).value is not None:
        print(sheet.cell(n,1).value+'  '+sheet.cell(n,2).value+'  '+sheet.cell(n,3).value+'局')
    else:
        print(sheet.cell(n,1).value+'  ')
    
    
In [ ]:
import openpyxl

fi_xls = 'data/对局目录.xlsx'

wb = openpyxl.load_workbook(fi_xls)
sheet = wb['Sheet2'] 


for n in range(2,sheet.max_row+1):    
    #print(sheet.cell(n,1).value+'  ')
    if sheet.cell(n,2).value is not None:
        print(sheet.cell(n,1).value+'  '+sheet.cell(n,2).value)
    else:
        print(sheet.cell(n,1).value+'  ')

YALM文件操作

YALM文件读取转存JSON文件

In [ ]:
import yaml
import json

filename = 'data/全维健康中医体质检测问卷.yaml'
with open(filename, 'r', encoding='utf-8') as f:
    result = yaml.load(f.read(), Loader=yaml.FullLoader)
i = 1
#print(result)
filename = 'data/全维健康中医体质检测问卷.json'
with open(filename, 'w') as fl:
    json.dump(result, fl, ensure_ascii=False)
print('ok')

按照年龄分组生成心理问卷

In [ ]:
import json
import os,sys,shutil
import openpyxl

list1 = [
    [1,'完全不正确','有点正确','多数正确','完全正确'],
    [2,'从不','极少','偶尔','经常','频繁','非常频繁','每天'],
    [3,'不符合','有时符合','常常符合','总是符合'],
    [4,'从不','很少','有时','经常','总是'],
    [5,'非常不满意','不满意','一般','满意','非常满意'],
    [6,'没有或很少时间(少于1天)','一部分时间(1-2天)','相当多时间(3-4天)','绝大部分时间(5-7天)'],
    [7,'从来没有这种感觉','很少有这种感觉','有时有这种感觉','经常有这种感觉'],
    [8,'完全不同意','不同意','同意','完全同意'],    
    [10,'晚多了','晚一点','差不多','早一点','早多了']
]
dict1 = {}
for item in list1:
    #dict1.setdefault(item[0],[])
    list2 =[]
    for i in range(1,len(item)):
        list2.append(item[i])
    dict1[item[0]] = list2
dict_choiced = {}
print(dict1)
wj = {}
wj["login"] = "phone"
wj["locale"] = "zh-cn"
wj["title"] = '社区心理测评问卷'
list2 =[]
dict2 = {
     "type": "radiogroup",
      "name": "Gender",
      "title": {
        "zh-cn": "您的性别"
      },
      "isRequired": True,
      "choices": [
        {
          "value": "m",
          "text": "男性"
        },
        {
          "value": "f",
          "text": "女性"
        }
      ]    
}
list2.append(dict2)
dict2 = {}
dict3 = {}
dict2 = {
     "type": "radiogroup",
      "name": "Age",
      "title": {
        "zh-cn": "您的年龄"
      },
      "isRequired": True,
      "choices": [
        {
          "value": "Y",
          "text": "8-17岁"
        },
        {
          "value": "M",
          "text": "15-59岁"
        },
        {
          "value": "O",
          "text": "60岁及以上"
        }
      ]    
}
list2.append(dict2)

wb = openpyxl.load_workbook('data/心理问卷.xlsx')
sheet = wb.active
data1 =list(sheet.values)
del data1[0]
for item in data1:
    
    dict2 = {}        
    dict2['type'] = item[4]     
    dict2['name'] = 'q'+str(item[0])+item[3]
    dict2['visibleIf'] = '{Age}="'+item[3]+'"'
    dict3 = {}
    dict3["zh-cn"] = item[1]
    dict2['title'] =dict3    
    dict2['isRequired'] = True
    if item[4] == 'rating':
        dict2['rateMin'] = 0
        dict2['rateMax'] = 7
        dict2['minRateDescription'] = { 'zh-cn':'没有'}
        dict2['maxRateDescription'] = { 'zh-cn':'非常同意'}
    else:
        if int(item[2]) in dict_choiced.keys():
            dict2['choicesFromQuestion'] = dict_choiced[int(item[2])]
        else:
            list3 = []
            i = 1
            for xm in dict1[int(item[2])]:
                dict3 = {}
                dict3 = {'value': i,'text' : xm}
                list3.append(dict3)
                i+=1
            dict2['choices'] = list3
            dict_choiced[int(item[2])] = dict2['name']
    list2.append(dict2)
dict3 = {}
dict3["elements"] = list2
wj["pages"] =[]

wj["pages"].append(dict3)
#filename = 'data/心理问卷1.json'
#with open(filename, 'w') as fl:
#    json.dump(wj, fl, ensure_ascii=False)
#print('ok')
with open('心理问卷.yml', 'w', encoding='utf-8') as f:
    yaml.dump(data=wj, stream=f, allow_unicode=True)
In [ ]:
import yaml

邮件管理

使用网易邮箱群发邮件

In [ ]:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
import smtplib
import requests
import time
import re
import json


      

fl_name = 'data/低碳院报告.json'

with open(fl_name,'r') as fl:
     m_xx = json.load(fl)
for k, v in m_xx.items():
    m_bh = str(k).rjust(5,"0")
    fl_name = f'file/220724/new/{m_bh}-{v[0]}.pdf'
    fl = f'{m_bh}-{v[0]}.pdf'
    m_rec = v[2]+'@ceic.com'
    
    from_addr = 'kmingedu@163.com' #发件邮箱
    password = 'GKWUZXMVYKSSUSSL' #邮箱密码
    smtp_server = 'smtp.163.com' #SMTP服务器,以新浪为例
    server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口
    msg = MIMEMultipart()
    msg['Subject'] = Header("低碳清洁能源研究院体质监测报告",'utf-8')
    msg['From'] = Header('北京坤铭体质监测评估中心')
    msg['To'] = Header(m_rec)

    from_addr = 'kmingedu@163.com' #发件邮箱
    password = 'GKWUZXMVYKSSUSSL' #邮箱密码
    to_addr = m_rec #收件邮箱
    att1 =MIMEApplication(open(fl_name, 'rb').read())
    #att1["Content-Type"] = 'application/octet-stream'
    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    att1.add_header('Content-Disposition','attachment',filename=fl)
    msg.attach(att1)
    try:
        server.login(from_addr,password) #登录邮箱
        server.sendmail(from_addr,to_addr,msg.as_string())  #将msg转化成string发出
        server.quit
        time.sleep(5)
        print(f'{fl}邮件发送成功!')
    except smtplib.SMTPException:
        print ("Error: 无法发送邮件")
    

使用网易邮箱群发测试链接

In [ ]:
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
import smtplib
import requests
import time
import re
import json
import jwt

key = "Xixi1234"
encoded = jwt.encode({"email": "eygsoft@gmail.com"}, key, algorithm='HS256')
#print(encoded)


      
list1 = [
    {'name':'lillianwong','E_mail':'lillianwong73@gmail.com'},
    {'name':'杨玉冰','E_mail':'lkyyb@126.com'}]


for item in list1:
    m_mail = item['E_mail']
    m_name = item['name']
    encoded = jwt.encode({"email": m_mail}, key, algorithm='HS256')
    lianjie = f'https://www.forraid.com/survey/token/{encoded}/tcm0'
    mail_msg = f"""
<p>欢迎参加北京坤铭体质监测评估中心中医体质检测</p>
<p><a href="{lianjie}">点击参加测试</a></p>
"""
    from_addr = 'kmingedu@163.com' #发件邮箱
    password = 'GKWUZXMVYKSSUSSL' #邮箱密码
    smtp_server = 'smtp.163.com' #SMTP服务器,以新浪为例
    server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口
    msg = MIMEText(mail_msg, 'html', 'utf-8')
    msg['Subject'] = Header("中医体质检测测试链接",'utf-8')
    msg['From'] = Header('北京坤铭体质监测评估中心')
    msg['To'] = Header(m_mail)

    
    to_addr = m_mail #收件邮箱
    try:
        server.login(from_addr,password) #登录邮箱
        server.sendmail(from_addr,to_addr,msg.as_string())  #将msg转化成string发出
        server.quit
        time.sleep(5)
        print('邮件发送成功!')
    except smtplib.SMTPException:
        print ("Error: 无法发送邮件")
    
In [ ]:
try:
        server.login(from_addr,password) #登录邮箱
        server.sendmail(from_addr,to_addr,msg.as_string())  #将msg转化成string发出
        server.quit
        time.sleep(5)
        print(f'{fl}邮件发送成功!')
    except smtplib.SMTPException:
        print ("Error: 无法发送邮件")
    

Twilio使用

In [ ]:
import os
from twilio.rest import Client


# Your Account Sid and Auth Token from twilio.com/console
# and set the environment variables. See http://twil.io/secure
account_sid = 'AC1aac8c18078bf371992fda0f924860c8'
auth_token = '956199d0f1b724d00ef8bb934fcaefe9'
client = Client(account_sid, auth_token)

message = client.messages \
                .create(
                     body="I'm back.",
                     from_='+12056066931',
                     to='+8613793180751'
                 )

print(message.sid)
In [ ]:
import time

localtime = time.localtime(time.time())
#type(localtime)
print ("本地时间为 :", localtime)
jyr = '12345'
if time.strftime("%w", time.localtime()) in jyr:
    print('ok')
else:
    print('今日不是交易日!')
In [ ]:
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import requests
import time
import re

def sendmail(message):
    msg = MIMEText(message,'plain','utf-8')
    msg['Subject'] = Header("外汇价格已经到达预期价位!",'utf-8')
    msg['From'] = Header('512song@sina.com')
    msg['To'] = Header('songyi@yeah.net','utf-8')

    from_addr = '512song@sina.com' #发件邮箱
    password = '409fe5d8471da663' #邮箱密码
    to_addr = 'songyi@yeah.net' #收件邮箱
    smtp_server = 'smtp.sina.com' #SMTP服务器,以新浪为例
    server = smtplib.SMTP(smtp_server,25) #第二个参数为默认端口为25,有些邮件有特殊端口
    server.login(from_addr,password) #登录邮箱
    server.sendmail(from_addr,to_addr,msg.as_string())  #将msg转化成string发出
    server.quit()    
    
       

pattern = re.compile(r'\"(.*)\"')
url = 'http://hq.sinajs.cn/list=USDCAD'
strhtml = requests.get(url)
data = strhtml.text
if pattern.findall(data):
    for data1 in pattern.findall(data):
        data2 = data1.split(',')
#print(data2)
with open('price.txt','r') as fl:
    for line in fl:
        p_high = line.split(',')[0]
        p_low = line.split(',')[1]
m_message = '当前美元加元买入价:{}'.format(data2[1])
while time.strftime("%w", time.localtime()) in '12345':
    
    print(p_high,p_low)
    time.sleep(10)
    strhtml = requests.get(url)
    data = strhtml.text
    if pattern.findall(data):
        for data1 in pattern.findall(data):
            data2 = data1.split(',')
        if float(data2[1]) > float(p_high):
            m_message = '当前美元加元买入价:{}'.format(data2[1])
            sendmail(m_message)
            p_high = str(float(p_high) + 0.04) 
        if float(data2[1]) > float(p_high):
            m_message = '当前美元加元卖出价:{}'.format(data2[2])
            p_low = str(float(p_low) - 0.04)
            sendmail(m_message)
    time.sleep(900)
            

AWS应用

AWS获取sns信息

In [ ]:
import boto3

# Create an SNS client
sns = boto3.client('sns')

# Call SNS to list topics
response = sns.list_topics()

# Get a list of all topic ARNs from the response
topics = [topic['TopicArn'] for topic in response['Topics']]

# Print out the topic list
print("Topic List: %s" % topics)

AWS操作DynamoDB

In [ ]:
import boto3

# Get the service resource.
dynamodb = boto3.resource('dynamodb')

# Create the DynamoDB table.
table = dynamodb.create_table(
    TableName='waihui',
    
    AttributeDefinitions=[        
        {
            'AttributeName': 'code',
            'AttributeType': 'S'
        }
        
        
    ],
    KeySchema=[
        {
            'AttributeName': 'code',
            'KeyType': 'HASH'
        }
        
    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 5,
        'WriteCapacityUnits': 5
    }
    
)

# Wait until the table exists.
table.meta.client.get_waiter('table_exists').wait(TableName='waihui')

# Print out some data about the table.
print(table.item_count)
In [ ]:
import boto3
import decimal
# Get the service resource.
dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('waihui')

table.put_item(
   Item={
        'code': 'USDCAD',
        'high': Decimal('1.3200'),
        'low': Decimal('1.3000'),
    }
)
In [ ]:
import boto3
# Get the service resource.
dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('waihui')

response = table.get_item(
   Key={
        'code': 'USDCAD'        
    }
)
item = response['Item']
print(item)
In [ ]:
import boto3
# Get the service resource.
dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('waihui')

table.delete_item(
   Key={
        'code': 'USDCAD'        
    }
)
In [ ]:
import boto3
import decimal
# Get the service resource.
dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('waihui')
table.update_item(
    Key={
        'code': 'USDCAD'
    },
    UpdateExpression='SET low = :val1',
    ExpressionAttributeValues={
        ':val1': decimal.Decimal('1.2900')
    }
)
In [ ]:
import boto3

# Create SQS client
sqs = boto3.client('sqs')

queue_url = 'https://sqs.us-east-1.amazonaws.com/915521803346/MySqs1'

# Receive message from SQS queue
response = sqs.receive_message(
    QueueUrl=queue_url,
    AttributeNames=[
        'SentTimestamp'
    ],
    MaxNumberOfMessages=1,
    MessageAttributeNames=[
        'All'
    ],
    VisibilityTimeout=0,
    WaitTimeSeconds=0
)

message = response['Messages'][0]
receipt_handle = message['ReceiptHandle']

# Delete received message from queue
sqs.delete_message(
    QueueUrl=queue_url,
    ReceiptHandle=receipt_handle
)
print('Received and deleted message: %s' % message)

MongoDB系统GridFS文件管理

文件上传

In [ ]:
import pymongo
from gridfs import GridFS
from bson.objectid import ObjectId
import os

myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient["gaokao"]
mycol = mydb["college"]

UploadCache = "uploadcache"
dbURL = "mongodb://localhost:27017"

#上传文件
def upLoadFile(file_coll,file_name,data_link):
    client = pymongo.MongoClient('mongodb://localhost:27017/')

    db = client["gaokao"]

    filter_condition = {"filename": os.path.basename(file_name), "url": data_link}
    gridfs_col = GridFS(db, collection=file_coll)
    file_ = "0"
    query = {"filename":""}
    query["filename"] = file_name

    if gridfs_col.exists(query):
        print('已经存在该文件')
    else:

        with open(file_name, 'rb') as file_r:
            file_data = file_r.read()
            file_ = gridfs_col.put(data=file_data, **filter_condition)  # 上传到gridfs

            print(file_)


    return file_   
# 按文件名获取文档
def downLoadFile(self,file_coll,file_name,out_name,ver):
    client = pymongo.MongoClient(self.dbURL)

    db = client["store"]

    gridfs_col = GridFS(db, collection=file_coll)

    file_data = gridfs_col.get_version(filename=file_name, version=ver).read()

    with open(out_name, 'wb') as file_w:
        file_w.write(file_data)

# 按文件_Id获取文档       
def downLoadFilebyID(self,file_coll,_id,out_name):
    client = pymongo.MongoClient(self.dbURL)

    db = client["store"]

    gridfs_col = GridFS(db, collection=file_coll)

    O_Id = ObjectId(_id)

    gf = gridfs_col.get(file_id=O_Id)
    file_data = gf.read()
    with open(out_name, 'wb') as file_w:

        file_w.write(file_data)     


    return gf.filename    
m_dir = './data/tmp'
fls=os.listdir(m_dir)
n = 0
for fl in fls:
    #oldname=fl[n]
    name, suffix = os.path.splitext(fl)
    #if name in old:
    #    new_name = fi_path+ os.sep + fi_name[name]+suffix
    #    old_name = fi_path+ os.sep + fl[n]
     #   os.rename(old_name,new_name)
    #print(os.path.basename(fl))
    #print(fl,suffix[1:])
    full_path = m_dir+ '/' + fl
    upLoadFile("document",full_path,"")
#a = MongoGridFS("")
#a.upLoadFile("pdf","MongoGridFS.py","")
#a.downLoadFile("pdf","MongoGridFS.py","out2.p",2)
#ll = a.downLoadFilebyID("pdf","5d70a5b283a3c5104cd39346","out3.p")
#print (ll)
In [ ]:
import pymongo
from gridfs import GridFS
from bson.objectid import ObjectId
import os

myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient["gaokao"]
mycol = mydb["college"]

UploadCache = "uploadcache"
dbURL = "mongodb://localhost:27017"

#上传文件
def upLoadFile(file_coll,file_name,data_link):
    client = pymongo.MongoClient('mongodb://localhost:27017/')

    db = client["gaokao"]

    filter_condition = {"filename": file_name, "url": data_link}
    gridfs_col = GridFS(db, collection=file_coll)
    file_ = "0"
    query = {"filename":""}
    query["filename"] = file_name

    if gridfs_col.exists(query):
        print('已经存在该文件')
    else:

        with open(file_name, 'rb') as file_r:
            file_data = file_r.read()
            file_ = gridfs_col.put(data=file_data, **filter_condition)  # 上传到gridfs

            print(file_)


    return file_   
# 按文件名获取文档
def downLoadFile(self,file_coll,file_name,out_name,ver):
    client = pymongo.MongoClient(self.dbURL)

    db = client["store"]

    gridfs_col = GridFS(db, collection=file_coll)

    file_data = gridfs_col.get_version(filename=file_name, version=ver).read()

    with open(out_name, 'wb') as file_w:
        file_w.write(file_data)

# 按文件_Id获取文档       
def downLoadFilebyID(file_coll,_id,out_name):
    client = pymongo.MongoClient('mongodb://localhost:27017/')

    db = client["gaokao"]

    gridfs_col = GridFS(db, collection=file_coll)

    O_Id = ObjectId(_id)

    gf = gridfs_col.get(file_id=O_Id)
    file_data = gf.read()
    with open(out_name, 'wb') as file_w:

        file_w.write(file_data)     


    return gf.filename    
ll = downLoadFilebyID("pdf","5fbf351b62452a56d7d16603","out3.pdf")
print (ll)
#a = MongoGridFS("")
#a.upLoadFile("pdf","MongoGridFS.py","")
#a.downLoadFile("pdf","MongoGridFS.py","out2.p",2)
#ll = a.downLoadFilebyID("pdf","5d70a5b283a3c5104cd39346","out3.pdf")
#print (ll)

腾讯文字识别

In [ ]:
import json
import types
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.ocr.v20181119 import ocr_client, models
import base64
   
cred = credential.Credential("AKIDoZHHEB2lHbluEZvN8uYHwcdvacqfmDeJ","fEkr2VucwEQXXVN8jCd0CFBxdAe6Xny9")
httpProfile = HttpProfile()
httpProfile.endpoint = "ocr.tencentcloudapi.com"   
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile    
client = ocr_client.OcrClient(cred, "ap-beijing", clientProfile)   
req = models.GeneralAccurateOCRRequest()
with open("001.jpg","rb") as f:
    img_data = f.read()
img_base64 = base64.b64encode(img_data)
params = {
    "ImageBase64": img_base64.decode('utf-8')
}
req.from_json_string(json.dumps(params))

# 返回的resp是一个GeneralAccurateOCRResponse的实例,与请求对象对应
resp = client.GeneralAccurateOCR(req)
print(resp.to_json_string())

#except TencentCloudSDKException as err:
#    print(err)
In [ ]:
import pymupdf4llm
#md_text = pymupdf4llm.to_markdown("data/1782596-唐荣.pdf")
llama_reader = pymupdf4llm.LlamaMarkdownReader()
llama_docs = llama_reader.load_data("data/1782596-唐荣.pdf")

print(llama_docs)
In [ ]:
import pymupdf4llm
md_text = pymupdf4llm.to_markdown("data/1782596-唐荣.pdf")
#llama_reader = pymupdf4llm.LlamaMarkdownReader()
#llama_docs = llama_reader.load_data("data/1782596-唐荣.pdf")

print(md_text)
In [9]:
from pathlib import Path
import json
import shutil
import pymupdf4llm
#md_text = pymupdf4llm.to_markdown("data/1782596-唐荣.pdf")
#llama_reader = pymupdf4llm.LlamaMarkdownReader()
llama_docs = pymupdf4llm.to_markdown("data/1782596-唐荣.pdf",page_chunks=True)
print(llama_docs)
[{'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': []}]
In [ ]: