Daha çox

Arcpy.ValidateFieldName və unicode simvolları ilə probleminiz var?


İlə problemlər yaşayıramarcpy.ValidateFieldNameunicode simvolları ilə birlikdə fəaliyyət göstərir. Forma sahəsinə bir sahə əlavə etmək istəyirəm. Sahə adının 10-dan böyük olmasına icazə verilmir bayt (ya da heç olmasa belə düşünürəm), ammaValidateFieldName10-da kəsir simvol. Unicode xarakteri mütləq bir bayt böyük olmadığı üçün bu problemə səbəb olur.

Bu üç nümunəni nəzərdən keçirin:

Mövcud bir forma sənədinə # yol. file = r "C:  path  file.shp" # Bu işləyir. Ad 10 simvoldan sonra "abcdefghij" name1 = arcpy.ValidateFieldName ("abcdefghijklmnop", file) print name1 arcpy.AddField_management (in_table = file, field_name = name1, field_type = "TEXT") # şəklində kəsilir. Ad dəyişməzdir (10 simvoldan az olduğu üçün) #ArcMap 10 baytdan böyük olmadığı üçün qəbul edir. name2 = arcpy.ValidateFieldName ("äbcdefghi", file) print name2 arcpy.AddField_management (in_table = file, field_name = name2, field_type = "TEXT") # Bu işləmir. Tam 10 simvol olduğundan ad dəyişməzdir. #ArcMap qəbul etmir, çünki 10 baytdan (?) Böyükdür. name3 = arcpy.ValidateFieldName ("äbcdefghij", file) print name3 arcpy.AddField_management (in_table = file, field_name = name3, field_type = "TEXT") # 19

Üçüncü nümunələr mənə bu səhv verir:

Çalışma vaxtı xətası Traceback (son zəng): "" Fayl, sətir 1, Faylda "C: validate.py", sətir 19, arcpy.AddField_management (in_table = file, field_name = name3, field_type = "TEXT") "C: program files (x86) arcgis desktop10.2 arcpy arcpy management.py" faylı, 3200 sətri, AddField-da qaldırmaq e ExecuteError: ERROR 999999: İşləmə xətası. Sahə növü etibarsızdır və ya əməliyyat üçün dəstəklənmir. İcra edilmədi (AddField).

Qəribədir ki, yenə də sahəsi əlavə edir, ancaq adı ilə"äbcdefgh_1", dəyərinə baxmayaraqad3edir"äbcdefghij".

Sənədlərdə bunu söyləmək lazımdırValidateFieldName:

Bir sətir (sahə adı) və bir iş sahəsi yolu götürür və çıxış geodat verilənlər bazasında ad məhdudiyyətlərinə əsaslanan etibarlı bir sahə adını qaytarır.

Üçüncü nümunədə qaytarılan dəyər əslində etibarlı bir sahə adı olmadığı üçün bunun bir səhv olduğunu söyləmək doğru olarmı?

Bu işi bir şəkildə səhvsiz edə bilərəmmi? Bir sahənin adını istifadəçi girişindən götürə bilməliyəm və birtəhər etibarlı bir ada çevrildiyindən əmin olmalıyam.

Səhv mesajı niyə sahə növündən şikayətlənir, baxmayaraq ki"MƏTN"OK sahə növü olmalıdır?

RED: Bu ArcMap ilə bir səhv kimi görünür. Alanları Python əvəzinə ArcCatalogdan əlavə etsəm, oxşar bir davranış əldə edərəm.


ESRI dəstəyi ilə əlaqə saxladım və bunun həqiqətən bir səhv olduğunu təsdiqlədilər. ArcGIS 10.3-də düzəldilmişdir, buna görə həll yolu yüksəltməkdir.


Videoya baxın: ArcPy: Solving Large Transportation Analysis Problems (Oktyabr 2021).