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 Réponses :
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.
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
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. 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.
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. Etpandas_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.