0

我有以下嵌套列表(全部在一个列表中:一个主列表(Master)包含两个列表,它们都包含一个列表)

Master = \
["E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin [u'BGD_4_new_district', u'BGD_3_old_district', u'BGD_2_division', u'BGD_1_all', u'BGD_5_Upazilla', u'BGD_4_old_district', u'BGD_6_Union_court', u'BGD_6_Union', u'BD_exposed_coastal_area', u'BD_drought', u'BGD_1_River', u'BGD_1_River_detail', u'BD_international_bnd', u'BGD_1_River_1', u'BGD_7_Mauza', u'test', u'BGD_5_UpazillaAnno', u'BGD_4_new_districtAnno', u'BGD_4_new_districtAnno2']", 
 "E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BCAS_BD_Infrastructure    [u'BD_Health_Infrastructures_1', u'BD_Railway_Establishments_1', u'BGD_roads_1']"]

现在我想创建一个列表(作为 Windows 路径),其一个元素如下:(对于第一个列表)

"E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\u'BGD_4_new_district"

再次包含'u'unicode 的字符,"'"之后它也被删除,所以最后它是:在名为“My_Path”的列表中的元素中

"E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_4_new_district" 
"E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_3_old_district"
..........
..........
"E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BCAS_BD_Infrastructur\\BD_Health_Infrastructures_1"

@Martijn Pieters 我的 arcpy 代码是

import arcpy,os
p=[]
D=[]
admin="E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb"
arcpy.env.workspace =admin
datasetList = arcpy.ListDatasets("*", "Feature")
for dataset in datasetList:
d=str(dataset)
D.append(d)
dList = arcpy.ListTables() + arcpy.ListFeatureClasses() + arcpy.ListRasters()
for dataset in arcpy.ListDatasets():
    arcpy.env.workspace=os.path.join(admin,dataset)
    dList+=arcpy.ListDatasets()+arcpy.ListFeatureClasses()
    p.append(str(arcpy.env.workspace)+str(arcpy.ListFeatureClasses()))##--this makes list
4

1 回答 1

2

您有两个字符串,其中嵌入了 python 列表。它们不是实际的列表。

您可以返回使用该ast.literal_eval()函数将它们制作成带有 unicode 值的列表。感觉就像我们正在修复由其他代码引起的问题,更好的解决方法是首先不构建这些值。

from ast import literal_eval
import os.path

output = []
for entry in Master:
    base, lst = entry.split(None, 1)
    for name in literal_eval(lst):
        output.append(os.path.join(base, name))

这会产生正确的 unicode 路径(在 Windows 上是个好主意):

>>> output
[u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_4_new_district', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_3_old_district', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_2_division', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_1_all', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_5_Upazilla', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_4_old_district', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_6_Union_court', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_6_Union', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BD_exposed_coastal_area', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BD_drought', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_1_River', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_1_River_detail', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BD_international_bnd', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_1_River_1', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_7_Mauza', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\test', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_5_UpazillaAnno', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_4_new_districtAnno', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin\\BGD_4_new_districtAnno2', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BCAS_BD_Infrastructure\\BD_Health_Infrastructures_1', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BCAS_BD_Infrastructure\\BD_Railway_Establishments_1', u'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BCAS_BD_Infrastructure\\BGD_roads_1']
>>> print output[0]
E:\GIS_DOCUMENT\BCAS_Map\BCAS_All.gdb\BD_Admin\BGD_4_new_district

如果可以,您希望更改原始代码以生成一个字典,该字典使用基作为键,并使用名称列表作为值:

{'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BCAS_BD_Infrastructure': [u'BD_Health_Infrastructures_1',
                                                                      u'BD_Railway_Establishments_1',
                                                                      u'BGD_roads_1'],
 'E:\\GIS_DOCUMENT\\BCAS_Map\\BCAS_All.gdb\\BD_Admin': [u'BGD_4_new_district',
                                                        u'BGD_3_old_district',
                                                        u'BGD_2_division',
                                                        u'BGD_1_all',
                                                        u'BGD_5_Upazilla',
                                                        u'BGD_4_old_district',
                                                        u'BGD_6_Union_court',
                                                        u'BGD_6_Union',
                                                        u'BD_exposed_coastal_area',
                                                        u'BD_drought',
                                                        u'BGD_1_River',
                                                        u'BGD_1_River_detail',
                                                        u'BD_international_bnd',
                                                        u'BGD_1_River_1',
                                                        u'BGD_7_Mauza',
                                                        u'test',
                                                        u'BGD_5_UpazillaAnno',
                                                        u'BGD_4_new_districtAnno',
                                                        u'BGD_4_new_districtAnno2']}
于 2013-06-03T08:27:32.450 回答