【问题标题】:How to convert multiple .json files into multiple .db files with sqllite3 and pandas?如何使用 sqlite3 和 pandas 将多个 .json 文件转换为多个 .db 文件?
【发布时间】:2017-12-22 01:15:51
【问题描述】:

我有 11 个 .json 文件(2006.json、2007.json、...、2016.json)存储在名为 /arbetsformedlingen 的目录中。我想要的是将所有这 11 个 .json 文件转换为 11 个 .db 文件,例如(2006.db,2007.db,...,2016.db)。我正在使用 jupyter (ipython) 笔记本和 python 3.6 (py36)。以下代码获取所有 .json 文件并将其转换为一个名为 arbetsformedlingen.db 的文件(这是一个大文件)。

    import pandas as pd
    import sqlite3
    import uuid

    conn=sqlite3.connect('/Users/mo/PBL/arbetsformedlingen/arbetsformedlingen.db')  
    conn.execute('drop table if exists stillinger')

    for year in range(2006,2017,1):

        file = '/Users/mo/PBL/arbetsformedlingen/' + str(year) + '.json'
        df = pd.read_json(file, lines=True)

        guids = []
        for i in range(0,len(df)):
        guids.append(str(uuid.uuid4()))

        guids_s = pd.Series(guids)
        df.insert(0, 'ID', guids_s)

        df.to_sql("stillinger", conn, if_exists="append", index=False, chunksize=1000)


    sql = """
        select * from stillinger limit 1
          """

    res = pd.read_sql(sql, conn); res

如果我想将所有内容存储在一个 .db 文件中,这非常有用。关于如何创建 11 个 .db 而不是一个 .db 文件的任何建议?也许是对代码的简单修改,或更有效的转换方式?

这种方式合理吗?:

    for year in range(2006,2017,1):
        for file in year: 

            conn=sqlite3.connect('/Users/mo/PBL/arbetsformedlingen/+ str(year)  + '.db')  
            conn.execute('drop table if exists stillinger')

            file = '/Users/mo/PBL/arbetsformedlingen/'  + str(year) + '.json'
            df = pd.read_json(file, lines=True)

            guids = []
            for i in range(0,len(df)):
            guids.append(str(uuid.uuid4()))

            guids_s = pd.Series(guids)
            df.insert(0, 'ID', guids_s)

            df.to_sql("stillinger", conn, if_exists="append", index=False, chunksize=1000)


    sql = """
        select * from stillinger limit 1
          """

    res = pd.read_sql(sql, conn); res

最好的问候 莫

【问题讨论】:

  • 您可以将数据库的创建移到 for 循环中。
  • @ChristianStade-Schuldt 我编辑了这个问题。没搞清楚cmets下的编码部分??????。

标签: python json database pandas sqlite


【解决方案1】:

感谢@Christian Stade-Schuldt 的提示!这解决了我的问题:

for year in range(2006,2017,1):
    conn=sqlite3.connect('/Users/mo/PBL/arbetsformedlingen/' + str(year)  + '.db') 
    cur = conn.cursor()
    conn.execute('drop table if exists stillinger')

    file = '/Users/mo/PBL/arbetsformedlingen/' + str(year) + '.json'
    df = pd.read_json(file, lines=True)


    guids = []
    for i in range(0,len(df)):
        guids.append(str(uuid.uuid4()))

    guids_s = pd.Series(guids)
    df.insert(0, 'ID', guids_s)

    df.to_sql("stillinger", conn, if_exists="append", index=False, chunksize=1000)

【讨论】:

    猜你喜欢
    • 2022-12-19
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2018-11-14
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多