2017-06-14 29 views
-1

我使用Global Mapper从各种KMZ文件创建了几个shapefile。输出名称看起来是这样的:如何从ArcGIS Shapefile中删除部分文件名?

“AllLines_P__1035 _-_ 600_Mile_FlightLine_ABC_Flight_Plans_Line_94.kml.shp”

我想删除除了在ArcGIS的文件名“Line_94.shp”的一切。

是否有一个Python脚本或工具,我可以用它来从100多个文件中删除这个多余的命名?除行号外,所有文件的命名都相同。

谢谢!

+1

你的意思是每个文件重命名为线_ ??。SHP – suvy

+0

你会发现ArcPy中Q&作为此在[gis.se]堆叠交换。 – PolyGeo

回答

0

那么如果你是确保所有将是相同的,除了Line_94即行号

简单

len('AllLines_P__1035_-_600_Mile_FlightLine_ABC_Flight_Plans_')

为我们提供了有一些Line_94即行号前56个字符。

所以你想从第57个角色。因此只需使用slicing即可分割所有56个字符。 055将被删除,并且将打印56中的字符。

注意:索引从0开始。因此删除56字符意味着全部删除,直到索引55

s1 = 'AllLines_P__1035_-_600_Mile_FlightLine_ABC_Flight_Plans_Line_94.kml.shp' 
s2 = 'AllLines_P__1035_-_600_Mile_FlightLine_ABC_Flight_Plans_Line_12.kml.shp' 
s3 = 'AllLines_P__1035_-_600_Mile_FlightLine_ABC_Flight_Plans_Line_2.kml.shp' 
print(s1[56:]) 
print(s2[56:]) 
print(s3[56:]) 

输出:

Line_94.kml.shp 
Line_12.kml.shp 
Line_2.kml.shp 
0
import glob 
import os 

for oldname in glob.glob('AllLines*'): 
    newname=oldname.replace('.kml','').replace('AllLines_P__1035_-_600_Mile_FlightLine_ABC_Flight_Plans_','') 
    os.rename(oldname,newname) 
0
import glob 

def split_string(s): 
    ln,ext=s.split('_')[-2:] 
    ext='.'.join([ext.split('.')[0],ext.split('.')[2]]) 
    return '_'.join([ln,ext]) 

如果你只是想名字,然后

renamed_strs=[split_string(s) for s in glob.glob('*.shp')] 

如果要重命名的所有文件,然后

from subprocess import call 

for s in glob.glob('*.php'): 
    call(["mv",s,split_string(s)]) 

如果你在windows上,你可以在调用函数中使用move而不是mv。 如果你的文件跨越多个目录检查os.walk()功能

+0

为什么使用'subprocess.call'而不是'os.rename'? – fenceop

+0

在这种情况下可能会更好!我喜欢子过程,可以一次做多件事。 – suvy