1
votes

Importer un fichier MDB dans Python (pandas) sur Mac

J'exécute python 3.6 sur un mac. J'ai téléchargé un fichier mdb mais je n'ai pas accès à Microsoft, j'aimerais importer chaque table dans python et travailler avec là-bas.

J'ai installé mdbtools et j'exécute ce qui suit depuis Spyder:

import pandas_access as mdb
for tbl in mdb.list_tables('avroll_19.mdb'):
    print(tbl)

J'obtiens cette erreur: FileNotFoundError: [Errno 2] Aucun fichier ou répertoire de ce type: 'mdb-tables': 'mdb-tables '

J'ai également essayé ceci, mais j'obtiens la même erreur:

import pandas as pd
import subprocess
import os

os.chdir('<directory where mdb file is>')

def show_tables(path='avroll_19.mdb'):
    tables = subprocess.check_output(["mdb-tables", path])
    return tables.decode().split()

show_tables()

J'utilise Sypder dans Anaconda, je ne sais pas si c'est un problème.

Le fichier mdb se trouve ici: https: //www1.nyc.gov/assets/finance/downloads/tar/avroll_20.zip

J'ai également essayé de le faire en utilisant pyodbc, cependant, il semble que le pilote nécessaire est non disponible pour mac.

Merci pour votre aide.


3 commentaires

Pour le premier bloc: les fichiers d'accès ne sont pas des exécutables, ce que vous essayez de faire n'est donc pas clair. Pour le deuxième bloc: avez-vous changé le chemin de travail?


Le premier bloc tente d'obtenir les noms des tables dans le fichier mdb. Pour la seconde, le fichier mdb se trouve dans le répertoire référencé par os.chdir.


Je vois que mdb-tables est un exécutable. Jamais entendu parler. Et pandas_access semble être un ancien module maintenu. Je suggère de demander à un ami / collègue Windows d'extraire les données nécessaires du fichier de base de données.


3 Réponses :


1
votes

J'ai une solution de contournement en utilisant R plutôt que Python. J'ai référencé du matériel de ce post: https://medium.com /@wenyu.z/reading-ms-access-mdb-files-on-mac-969a176baa7a .

D'abord, dans le terminal: brew install mdbtools . Veuillez noter que cela nécessite que homebrew soit déjà installé.

Deuxièmement, dans R exécutez ceci:

library(Hmisc)
data <- mdb.get('avroll_19.mdb')

Bien sûr, remplacez avroll_19.mdb par votre base de données nom de fichier.


0 commentaires

0
votes

J'obtiens également la même erreur de fichier introuvable. c'est parce que ma source de données d'accès est plus ancienne .mdb 32 bits et mon python est 64 bits.

il fonctionne sur des machines 32 bits


0 commentaires

1
votes

Je viens de confirmer que l'approche suivante fonctionne avec les versions actuelles de pandas , JayDeBeApi et UCanAccess Pilote JDBC. Pour plus d'informations sur la configuration de l'environnement Java / UCanAccess, consultez cette réponse .

import jaydebeapi
import pandas as pd

db_path = "/home/gord/UCanAccessTest.accdb"

ucanaccess_jars = [
    "/home/gord/Downloads/JDBC/UCanAccess/ucanaccess-5.0.0.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/commons-lang3-3.8.1.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/commons-logging-1.2.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/hsqldb-2.5.0.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/jackcess-3.0.1.jar",
]
classpath = ":".join(ucanaccess_jars)
cnxn = jaydebeapi.connect(
    "net.ucanaccess.jdbc.UcanaccessDriver",
    f"jdbc:ucanaccess://{db_path}",
    ["", ""],
    classpath,
)

df = pd.read_sql_query("SELECT * FROM Clients", cnxn)
print(df)
"""console output:
   ID      LastName FirstName                  DOB
0   1      Thompson      Gord  2017-04-01 07:06:27
1   2        Loblaw       Bob  1996-09-12 16:03:00
"""

Notez que cela fonctionne pour lire depuis Access dans les pandas mais que ne fonctionnera pas pour réécrire dans Access en utilisant to_sql .


1 commentaires

+1. J'ai commencé à chercher comment lire les fichiers .mdb dans les pandas aujourd'hui et tout ce que j'ai pu trouver, ce sont vos réponses Gord! Et j'ai eu la chance de le faire, je dois le dire. Installé UCanAccess avec un peu d'effort, puis c'était aussi simple que de faire pip install jaydebeapi.