循环遍历genfromtxt对象以获取子字符串并放入sqlite数据库

2024-09-26 22:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python非常陌生,我正在尝试使用SQLalchemy和SQLite3构建这个数据库

有一个csv文件的zip文件,我正试图处理并放入SQLite数据库。我已经将csv文件转换为表,其中一个表包含一个需要进行子串处理的列

基本上,该列可能有如下数据: “xxxx治疗阶段:DCDFDSSF临床标准:DSFSF人群标准:SDFDDFDF治疗标准:XXSDSA” 在一个单元格中,我试图将短语“治疗阶段”之前的字符串,以及“治疗阶段”和“临床标准”之间、“临床标准”和“总体标准”之间以及“总体标准”和“治疗标准”之间的字符串分隔开,但是一个单元格可能没有这些关键字中的一个或任何一个。
在我尝试将此列作为子字符串之前,数据库运行得出人意料。 现在什么都没发生。它好像是在一个循环或什么东西,但不知道如何检查这一点我已经删除了其他表的所有其他代码)

txt文件可以在这里找到:http://www.pbs.gov.au/downloads/2019/10/2019-10-01-extracts-down-converted.zip

from numpy import genfromtxt
from time import time
from datetime import datetime
from sqlalchemy import Column, Integer, Float, Date, String, ForeignKey, 
Numeric, Table, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, relationship
import sqlalchemy

def Load_Data_tab(file_name):
    data = genfromtxt(file_name, dtype='unicode', delimiter = "\t", 
skip_header=False, converters={0: lambda s: str(s)})
    return data.tolist()

Base = declarative_base()

fN_Restriction = "RestrictionExtract_191001.txt"

class Restrictions(Base):
    __tablename__ = 'restrict'
    IndicatId1 = Column(Text, primary_key=True)
    RestrictIndicatText = Column(Text)
    MiscRestrictFlag = Column(Integer)
    DateRequireFlag = Column(String(1))
    TextRequireFlag = Column(String(1))
    TreatmentPhase = Column(Text)
    TreatmentCriteria = Column(Text)
    ClinicalCriteria = Column(Text)
    PopulationCriteria = Column(Text)

if __name__ == "__main__":

    #Create the database
    engine = create_engine('sqlite:///csv_test.db')
    Base.metadata.create_all(engine)

    #Create the session
    session = sessionmaker()
    session.configure(bind=engine)
    s = session()

 # Build Restriction Table
    try:
        data = Load_Data_tab(fN_Restriction)  
        for i in data:
            ChopString = i[1]
            TP = ChopString.find('Treatment Phase:') 
            CC = ChopString.find('Clinical criteria:')
            PC = ChopString.find('Population criteria:')
            TC = ChopString.find('Treatment criteria:')
            if TP = 0:
                if CC = 0:
                    if PC = 0:
                        if TC = 0:
                            RestrictIndicatText1 = i[1]
                        else:
                            RestrictIndicatText1 = ""
            if TP > 0:
                RestrictIndicatText1 = ChopString[1:(TP-1)]
                if CC > 0:
                    TreatmentPhase1 = ChopString[TP:(CC-1)]
                elif PC > 0:
                    TreatmentPhase1 = ChopString[TP:(PC-1)]
                elif TC > 0:
                    TreatmentPhase1 = ChopString[TP:(TC-1)] 
                else:
                    TreatmentPhase1 = ChopString[TP:]
            if CC > 0:
                if TP = 0:
                RestrictIndicatText1 = ChopString[1:(CC-1)]
                if PC > 0:
                    ClinicalCriteria1 = ChopString[CC:(PC-1)]
                elif TC > 0:
                    ClinicalCriteria1 = ChopString[CC:(TC-1)]
                else:
                    ClinicalCriteria1 = ChopString[CC:]       
            if PC > 0:
                if TP = 0:
                    if CC = 0:
                        RestrictIndicatText1 = ChopString[1:(PC-1)]
                if  TC > 0:
                    PopulationCriteria1 = ChopString[PC:(TC-1)]
                else:
                    PopulationCriteria1 = ChopString[PC:]    
            if TC > 0:  
                if TP = 0:
                    if CC = 0: 
                        if PC = 0:
                            RestrictIndicatText1 = ChopString[1:(TC-1)] 
            TreatmentCriteria1 = ChopString[TC:]
        record = Restrictions(IndicatId1 = i[0], RestrictIndicatText = RestrictIndicatText1, MiscRestrictFlag = i[2], DateRequireFlag = i[3], TextRequireFlag = i[4], TreatmentPhase = TreatmentPhase1, TreatmentCriteria = TreatmentCriteria1, ClinicalCriteria = ClinicalCriteria1, PopulationCriteria = PopulationCriteria11)
        record.IndicatId1 = str(record.IndicatId1)[2:-1]
        s.add(record) #Add all the records
    s.commit() #Attempt to commit all the records
finally:
    s.close() #Close the connection

Tags: thetextfromimport标准ifsqlalchemycolumn

热门问题