在Python中的for循环中匹配字符串

时间:2018-12-19 14:21:53

标签: python regex pattern-matching arcpy

我有一个熊猫数据框df,看起来像这样

enter image description here

df = {'Regions': {0: 'REGION1', 1: 'REGION2'}, 'x': {0: '1249-43,1269-12,1280-12', 1: '1267-12,1269-12,1280-12'}}

以及名为rasters的光栅文件列表

rasters = 'SI_1206-33_50cm.tif', 'SI_1249-43_50cm.tif', 'SI_1269-12_50cm.tif', 'SI_1267-12_50cm.tif', 'SI_3865-17_50cm.tif' 

我想做的是创建一个rasters中所有与每个区域的df.x中的字符串匹配的所有条目的新列表。

for index, row in df.iterrows():
    region = row['Regions']
    tiffs = row['x']
    rasterlist = []
    for raster in rasters:
        if raster in tiffs:
            rasterlist = rasterlist.append(raster)
            print(rasterlist)

因此,在栅格上进行迭代时,我试图为REGION1的第一次迭代获取一个包含rasterlist'SI_1249-43_50cm.tif'的{​​{1}},对于第二次迭代获取一个{{1} }仅包含'SI_1269-12_50cm.tif'的REGION2。我想使用rasterlist中的'SI_1267-12_50cm.tif'功能将列表rasterlist用作进一步处理的输入。

此代码似乎不起作用的是模式匹配,每次迭代我得到一个空的MosaicToNewRaster_management变量。我认为是这种情况,因为df.x中的不同列表项之间用逗号隔开,并且arcpy函数似乎不起作用。这是我遇到的困扰,希望能得到一些输入。

1 个答案:

答案 0 :(得分:2)

您检查的方向错误。您正在使用

if raster in tiffs

但是tiffs就像'1249-43,1269-12,1280-12'一样,显然没有任何栅格在其中。您需要拆分tiff列表,然后反向检查是否有tiff。在栅格中。

tiffs = row['x'].split(',')
raster_list = []
for raster in rasters:
    for tiff in tiffs:
        if tiff in raster:
            raster_list.append(raster)
            # Assuming each tiff matches with only one raster
            # you can break to save some time here.
            break
print(raster_list)

如果您可以告诉我们更多有关栅格和tiff之间的映射的信息,那么可以使用dictset来完成某些事情。