1、正则提取字段文本中的规格如:4mg,100mg,20ml等

2、如果提取结果单位为mg 且数值大于100,则换算为g

定义函数:

DROP FUNCTION IF EXISTS "get_规格";CREATE OR REPLACE FUNCTION "get_规格"("var" TEXT,flags INT)RETURNS textAS $$import reret_num=Noneret_unit=Noneif re.search('[\d.]+[mg]+:[\d.]+[mg]+', var, re.I): ret_num=re.sub(r'[^\d:.]', "", re.search('[\d.]+[mg]+:[\d.]+[mg]+', var, re.I).group()) ret_unit=re.sub(r'[^a-zA-Z:]', "", re.search('[\d.]+[mg]+:[\d.]+[mg]+', var, re.I).group()).lower()elif re.search('[\d.]+mg', var, re.I): ret_num=re.search('[\d.]*(?=mg)', var, re.I).group() ret_unit=re.search('(?=[\d.]*)mg', var, re.I).group().lower() if eval(ret_num)>100:# 大于100mg折算为g ret_num=eval(ret_num)/1000 ret_unit='g' elif re.search('[\d.]+g', var, re.I):#克 ret_num=re.search('[\d.]*(?=g)', var, re.I).group() ret_unit=re.search('(?=[\d.]*)g', var, re.I).group().lower()elif re.search('[\d.]+ml', var, re.I): ret_num=re.search('[\d.]*(?=ml)', var, re.I).group() ret_unit=re.search('(?=[\d.]*)ml', var, re.I).group().lower()elif re.search('[\d.]+IU', var,re.I ): ret_num=re.search('[\d.]*(?=IU)', var,re.I ).group().upper() ret_unit=re.search('(?=[\d.]*)IU', var,re.I ).group().upper()#所有字母转为大写else: ret_num='' ret_unit='' if flags==0: ret='{}'.format(ret_num)elif flags==1: ret='{}'.format(ret_unit)else: ret='{},{}'.format(ret_num,ret_unit)return ret$$ LANGUAGE plpython3u;

3、代码解释:

$$与$$之间为Python代码

re.search('[\d.]+mg', var, re.I) #用于正则匹配判断re.search('[\d.]*(?=mg)', var, re.I).group()#用于提取匹配结果的数值部分re.search('(?=[\d.]*)mg', var, re.I).group().lower()#用于提取匹配结果的单位部分,如mg# .lower() 将提取结果全部转为小写,如MG或mG 转为mgeval(ret_num)>100#判断提取数值是否大于100ret_num=eval(ret_num)/1000ret_unit='g'#将大于100mg的数值处于1000,单位重新赋值为g'{}'.format(ret_num) flags==0#用于将提取内容转为字符串并返回'{}'.format(ret_unit) flags==1#用于将单位返回给函数结果

4、var,flags为函数:get_规格 的参数

DROP FUNCTION IF EXISTS "get_规格";CREATE OR REPLACE FUNCTION "get_规格"("var" TEXT,flags INT)RETURNS textAS $$return ret$$ LANGUAGE plpython3u;

5、执行创建函数

运行创建用于SQL的函数

6、调用使用函数(SQL语句)

SELECT get_规格('120g',0),get_规格('120g',1),get_规格('120g',2);

运行结果

7、也可将函数用于update批量更新列或提取整列数据规格

UPDATE"tmp_药品数据"SET "规格-数量"=get_规格("药品规格",0),"规格-单位"=get_规格("药品规格",1);

批量处理结果

python医药数据,PostgreSQL+Python实现药品规格数值与单位拆分相关推荐

  1. 视频教程-Python大数据可视化-Python

    Python大数据可视化 7年软件开发架构经验,12年IT培训经验,曾就职于拜特科技,金蝶软件,软酷网络等多家互联网公司.擅长Java EE,前端,iOS及大数据等技术方向的开发及教学.策划并撰稿大数 ...

  2. python爬虫数据提取,Python 信息提取-爬虫,爬虫提取数据, import re

    Python 信息提取-爬虫,爬虫提取数据, import re import requestsimport refrom bs4 import BeautifulSoupurl = "ht ...

  3. python读取数据文件-python多种读写excel等数据文件的方式(收藏篇)

    前言: python处理数据文件的途径有很多种,可以操作的文件类型主要包括文本文件(csv.txt.json等).excel文件.数据库文件.api等其他数据文件.下面小编整理下python到底有哪些 ...

  4. 2022年最新Python大数据之Python基础【一】介绍

    文章目录 Python 1.Python概述 2.Python解释器和pycharmIDE工具 3.Python中的注释 4.变量 5.标识符的命名规范 6.变量的使用 7.Python中的数据类型 ...

  5. python医药数据分析_Python数据分析案例-药品数据分析案例

    最近学习了python数据分析的一些基础知识,有numpy,pandas,matplotlib等,找了一个药品数据分析的小项目练一下手. 数据分析的步骤一般可以分为6个: 1,明确分析的目的 2,数据 ...

  6. python医药数据_采集万方医药方向的期刊+文章+作者信息(数据量千万级)

    最近将万方数据的爬取代码进行了重构,速度大概有10w每小时吧,因为属于公司项目,代码暂时就不开源了,所以在这里先说说思路和一些注意事项吧,顺带吐槽一下万方. 先上图: 其实逻辑也蛮简单的,医学类的期刊 ...

  7. python医药数据_python爬虫:爬取医药数据库drugbank

    import os import time import datetime import codecs from lxml import etree from selenium import webd ...

  8. 如何用python画数据图-python怎么对动态数据在同一张图上画出来

    兄弟, 你的需求不是很明确, 我不确定能不能帮到你, 这是我之前在matplotlib官网看到的Demo:import numpy as npimport matplotlib.pyplot as p ...

  9. python龙虎榜数据_[python]数据整理,将取得的众多的沪深龙虎榜数据整一整

    1 #coding=utf-8 2 3 importre4 importos5 importtime6 importdatetime7 8 defwriteFile(file,stocks,BS,da ...

最新文章

  1. 2022博士后,新加坡国立大学 Xinchao Wang 研究组
  2. Pig安装与配置教程
  3. boost::hana::at用法的测试程序
  4. IE9不支持CSS line-height的文字垂直居中解决方法
  5. 以下不属于计算机安全术语,基础知识(D).doc
  6. Unity物理投射相关问题整理
  7. python生成数字_Python生成数字图片代码分享
  8. 小白学习政策定价内容
  9. windows桌面远程连接ubuntu xrdp成功显示
  10. 马斯克宣布:半年后发布定制AI芯片,特斯拉车主免费升级Hardware 3
  11. Luogu4198 楼房重建
  12. 安全合规/法案--35--《APP收集使用个人信息自评估指南(征求意见稿)》原文及解读
  13. 【开源项目】CircuitJS1在线电路仿真
  14. DirectX 基础总结笔记
  15. 我学过的一些PS基本操作
  16. 学习单片机我们到底在学习什么?
  17. MySql 练习- 留存率计算
  18. 论文阅读笔记-Gated relational stacked denoising autoencoder with localized author embedding for
  19. 如何成为一名好的项目经理?
  20. c语言之动静态链接库

热门文章

  1. 计算机维护费可以跨年吗,航天信息服务费可以跨年抵扣吗
  2. 关于笔记本品牌的笑话!
  3. [诗歌]个人作诗集锦
  4. 2016北京集训测试赛(十三) Problem B: 网络战争
  5. 子类能不能继承父类的成员变量
  6. JAVA中的“抽象接口”
  7. Git命令行介绍和使用说明(持续更新)
  8. [Win系统][临时方案]系统任务管理器不能使用临时性解决方案
  9. [转载] 两种方法分割python多空格字符串
  10. [转载] pandas dataframe 提取行和列