2017-06-14 151 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