如何从ArcGIS Shapefile中删除部分文件名?

时间:2017-06-14 18:43:45

标签: python arcgis

我使用Global Mapper从各种KMZ文件创建了几个shapefile。输出名称如下所示:

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

我想删除除ArcGIS中文件名的“Line_94.shp”以外的所有内容。

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

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您确定除Line_94之外的所有内容都相同,即行号

一个简单的

len('AllLines_P__1035_-_600_Mile_FlightLine_ABC_Flight_Plans_')

告诉我们Line_94之前有56个字符,即行号。

所以你想从第57个角色。因此,只需使用slicing切片所有56个字符。 {@ 1}}至0将被删除,55中的字符将被打印。

注意:索引从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:])

答案 1 :(得分: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)

答案 2 :(得分: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()功能