使用re.match和SQLite

时间:2015-08-14 05:04:17

标签: python regex database sqlite dataframe

已决议 - 在底部看到最终编辑。

我有一个看起来如下的DataFrame:

df_transpose=
Time                     Date  Morning (5AM-9AM)  Day (9AM-6PM)  \
Area                                                            
D1_NY_1         01_05_2012           0.000000       0.000000   
D2_NY_2         01_05_2012           0.000000       0.000000   
D3_NJ_1         01_05_2012           1.000000       0.966667
   ... 

我希望使用SQLite将这个逐行写入数据库中的不同表。我已经设置了数据库Data.db,其中包含每个区域的单独表格 - 即表格名称包含上面DataFrame中列出的区域名称(例如“Table_D1-NY-1”等)。我想测试上面的DataFrame中的Area(索引)和我的数据库中的表的名称是否匹配,如果匹配,则将DataFrame的整个相关行写入包含相同Area的Table在名字里。这是我到目前为止所写的内容,以及我得到的错误:

CODE:

    ii=0
    for ii in range(0,row_count):
        df_area= df_transpose.index[ii]
        export_data= df_transpose.iloc[ii]
        cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
        available_tables=(cur.fetchall())
        for iii in range (0, row_count):
            if re.match('\w*'+df_area, available_tables[iii]):
                relevant_table=available_tables[iii]
                export_data.to_sql(name=relevant_table, con=con, if_exists=append)
            iii=iii+1

错误:表示“if re.match ...”行:

TypeError: expected string or buffer

我在搜索问题的解决方案之后尝试进行第二个(iii)循环,以避免将列表对象(available_tables)(而不是字符串)输入到re.match()。我仍然得到同样的错误。任何人都可以看到我的错误或帮我修复我的代码吗?

修改 有关信息,df_areaavailable_tables输出以下内容:

df_area=
u'D1_NY_1

available_tables=
[(u'US_D1_NY_1',), (u'US_D2_NY_2',), (u'US_D3_NJ_1',), ...]

修改

尚未能解决这个问题,并希望得到投入。我试图使用我的代码,但错误仍然相同。

最终编辑: 以为我会发布如何通过这个。问题是在available_tables之前是一个元组列表,而不是字符串列表。要使re.match()测试工作available_tables必须是字符串列表。我使用以下命令更改了它:

        cur.execute("SELECT name FROM sqlite_master WHERE type='table'")
        available_tables=[item[0] for item in cur.fetchall()]

1 个答案:

答案 0 :(得分:0)

无法发表评论,但可能会尝试使用r'\w*'代替'\w',因为您正在使用反斜杠。

此外,从您给出的输出看来available_tables是一个元组列表。所以你可能想要使用:

re.match(r'\w*'+df_area, available_tables[iii][0])