我使用Global Mapper从各种KMZ文件创建了几个shapefile。输出名称如下所示:
“AllLines_P__1035 _-_ 600_Mile_FlightLine_ABC_Flight_Plans_Line_94.kml.shp”
我想删除除ArcGIS中文件名的“Line_94.shp”以外的所有内容。
我是否可以使用python脚本或工具从100多个文件中删除多余的命名?除行号外,所有文件都具有相同的命名。
谢谢!
答案 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()
功能