2013-06-03 33 views
0

我有下面的嵌套表(所有的都在一个列表:一个主表(主)包含两个列表两者通过一个列表包含)如何使从多个嵌套列表清单

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_Pa”的元素TH”是

"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 
+1

您有一个包含两个字符串的列表。它们不是嵌套列表。部分元素*看起来像列表,但它们仍然只是字符串。您使用unicode值在现有列表上调用了'str()'。 –

+1

告诉我们建立这个名单摆在首位的代码?我可以帮助您修复这些字符串,但如果您不首先创建这些值,它会更容易,更容易。 –

+0

@ Martijn Pieters我在使用arcpy库 – SIslam

回答

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']} 
+0

什么!我无法使用它;它带有EOF错误 – SIslam

+0

@SharifulIslam:那么你的实际数据包含的内容多于'literal_eval()'可以处理的内容。 –