我一直在试图找出如何更改ArcGIS文件地理数据库的排序顺序。我一直在使用Python和Arcpy将许多CAD文件转换为文件地理数据库要素数据集。我成功地做到了这一点,但结果以字典顺序报告,我理解正确。就是这样排序:
1,10,12,2,20,200,3,33,34等
虽然这是一种明智的阅读方式,但我一直在寻求将其纳入“自然/人类”秩序。我已经对这个概念做了大量研究,并找到了实现这一目标的代码。
How to sort alpha numeric set in python
Sorting alphanumeric strings in Python
所以现在问题是以'自然顺序'重新排序我的所有要素数据集。
这是允许我按顺序打印数据集的代码,但实际上并没有编辑地理数据库。
import re, arcpy
arcpy.env.workspace = r"<input geodatabase location>"
datasets = arcpy.ListDatasets()
# Natural sort through input
def sorted_nicely(l):
""" Sort the given iterable in the way that humans expect."""
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)
# Iterate through listed datasets
for x in sorted_nicely(datasets):
print(x)
这段代码,其中使用了上述来源的难以排序的脚本,在我的IDE中对所需的结果进行排序和打印,但它实际上并没有对我的文件地理数据库执行任何操作。
我想在不使用任何未预先安装的模块的情况下执行此操作,因为这需要我获得进一步下载的权限(即进一步的复杂性)。
谢谢!
答案 0 :(得分:0)
我不知道影响排序顺序的方法 - ArcMap或ArcCatalog仅将其排序用于显示目的,而不是通过地理数据库中的任何设置。
如果您愿意重命名要素数据集,那么这篇GIS.SE文章对其工作原理有一个有用的概述:Batch renaming of feature datasets, and feature classes based on new dataset name?您还需要考虑数字长度的变化来弄清楚如何添加前导零,但这可能是一个新的好question to ask:)