J'ai une table que j'aimerais joindre à un fichier de formes ArcGIS. Mon problème est que la table a deux champs d'identité (c'est-à-dire "numéro de plan" et "numéro de contrat") et le fichier de forme a un champ d'identité (c'est-à-dire "nom"). Je veux joindre le "Nom" du fichier de formes au "Numéro de Plan" OU au "Numéro de Contrat". En tant qu'arrière-plan, le fichier de formes est créé en dessinant manuellement des polygones dans ArcGIS. Ces polygones représentent différents projets. L'identifiant "Nom" peut être soit le numéro de planification initial d'un projet, soit le numéro de contrat existant après la budgétisation du projet. Le numéro de planification existe lorsqu'il n'y a pas de budget, et le numéro de contrat vient plus tard. Les polygones sont créés et le champ "Nom" est rempli avec l'étape d'identification (soit le numéro de planification ou le numéro de contrat) atteinte par le projet. Ainsi, le champ "Nom" du fichier de formes contient des numéros de planification ou des numéros de contrat.Joindre l'un des deux champs d'une table dbf à un seul champ de fichier de formes ArcGIS - Python
En même temps, nous avons une base de données complexe de tous les projets avec deux champs représentant à la fois le numéro de la planification et le numéro de contrat:
PLN ------------ ----- Phase contrat ------------ Longueur ----- NTP --------- SC ------------- Notes
1415-003 ----- WD-2506 ---- Pré-planification ---- 45 ---------- 1/1/1900 ---- 1/20/1900 ----- test Pour créer mon code, j'ai créé une table xml simple qui lie à la base de données. Cette table xml comporte un champ PLN (numéro de plan) et un champ Contrat (numéro de contrat). Dans mon code, j'ai converti ce fichier XML en dbf. J'essaye maintenant de trouver un moyen de joindre un "nom" Shapefile à SOIT le "PLN" ou le "contrat".
S'il vous plaît voir le code ci-dessous:
#Convert xlsx to table:
import xlrd
in_excel= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.xlsx'
out_table= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.gdb'
# Perform the conversion
join_table= arcpy.ExcelToTable_conversion(in_excel, out_table)
print join_table
# Join
# Set the local parameters
inFeatures = r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\CDDprojects.shp'
joinField =
joinTable = join_table
fieldList = ["PLN", "Contract", "Phase", "Length", "NTP", "SC", "Notes]
Je ne suis pas sûr que d'entrer dans joinField et s'il y a un autre code que je dois inclure.
Révision 1: J'utilise le code d'Ethan, mais a reçu un message d'erreur à:
with master_table.open():
with minimal_table.open():
minimal_index = dbf.create_index(minimal_table, lambda record: record.name)
L'erreur se lit comme suit:
Traceback (most recent call last):
File "W:\Engineering\ENGINEER\LAMP (062012)\Database\VisualDatabase\LAMP.py", line 53, in <module>
with master_table.open():
AttributeError: 'Result' object has no attribute 'open'
Révision 2: Je suis un niveau débutant alors peut-être que je suis Il manque quelque chose d'assez simple. Lorsque je tente d'importer DBF, je reçois le une erreur après mon code:
Traceback (most recent call last):
File "W:\Engineering\ENGINEER\LAMP (062012)\Database\VisualDatabase\LAMP.py", line 50, in <module>
import dbf
ImportError: No module named dbf
J'ai téléchargé le module FFC, mais lors de l'exécution du programme d'installation, je reçois cette erreur:
Warning (from warnings module):
File "C:\Python27\ArcGIS10.3\lib\distutils\dist.py", line 267
warnings.warn(msg)
UserWarning: Unknown distribution option: 'install_requires'
Je Je ne sais pas ce que je fais mal pour installer le dbf.
RÉVISION 3: J'ai installé le module dbf et il est importé avec succès dans arcpy.Cependant, je reçois toujours le même message d'erreur:
Traceback (most recent call last):
File "W:\Engineering\ENGINEER\LAMP (062012)\Database\VisualDatabase\LAMP.py", line 56, in <module>
with master_table.open():
AttributeError: 'Result' object has no attribute 'open'
Mon code est:
#Convert xlsx to table:
import xlrd
in_excel= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.xlsx'
out_table= r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\JoinTest.gdb'
# Perform the conversion
join_table= arcpy.ExcelToTable_conversion(in_excel, out_table)
import enum
import dbf
# table with all projects at all stages
master_table = join_table
# table with single project and most up-to-date stage
minimal_table = r'W:\\Engineering\\ENGINEER\\LAMP (062012)\\Database\\VisualDatabase\\Planning_Out\\CDDprojects.dbf'
with master_table.open(): (LINE 56 which the AttributeError calls)
with minimal_table.open():
minimal_index = dbf.create_index(minimal_table, lambda record: record.name)
# cycle through master, updating minimal if necessary
for master in master_table:
# look for PLN # first
found = minimal_index.search(master.PLN)
if not found:
# if record doesn't exist with PLN #, try CONTRACT #
found = minimal_index.search(master.Contract)
J'utilise le module DBF ici: https://pypi.python.org/pypi/dbf
Merci.
Le 'AttributeError' fait référence à un' « Résultat » object' - Il n'y a pas de telles choses dans mon paquet 'dbf' - est-il une autre' dbf' qui est utilisé à la place de mes ? –
Vous avez raison. Cependant, j'ai des problèmes avec la commande "import dbf". S'il vous plaît voir la question révisée. –
@Ethan Après l'importation de dbf, je reçois toujours la même AttributeError qui fait référence à un objet 'Result'. J'importe xlrd pour convertir ma feuille excel en une table de dbf ... pourrait xlrd être en conflit avec le module de dbf? –