2017-07-17 3 views
-1

Ich habe 11 .json Dateien (2006.json, 2007.json, ..., 2016.json) in einem Verzeichnis namens/arbetsformedlingen gespeichert. Ich möchte all diese 11 .json-Dateien in 11 .db-Dateien konvertieren, z. B. (2006.db, 2007.db, ..., 2016.db). Ich benutze jupyter (ipython) Notebook und Python 3.6 (py36). Der folgende Code nimmt alle .json-Dateien und konvertiert sie in eine einzige Datei namens arbetsformedlingen.db (was eine große Datei ist).Wie konvertiert man mehrere .json-Dateien in mehrere .db-Dateien mit sqllite3 und Pandas?

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 

Das funktioniert gut, wenn ich alle in einer .db-Datei speichern möchte. Irgendwelche Vorschläge, wie Sie 11 .db anstelle einer .db-Datei erstellen können? Vielleicht eine einfache Änderung am Code oder eine effizientere Möglichkeit, sie zu konvertieren?

Ist das eine vernünftige Art und Weise ?:

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 

Mit freundlichen Grüßen Mo

+0

Sie könnten die Erstellung der Datenbank innerhalb der for-Schleife verschieben. –

+0

@ ChristianStade-Schuldt Ich habe die Frage bearbeitet. Habe den Codierungsteil unter Kommentaren nicht herausgefunden. –

Antwort

0

Vielen Dank für den Hinweis @Christian Stade-Schuldt! Dies löste mein Problem:

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) 
Verwandte Themen