Python实现shp文件split并按字段创建文件夹

已有文件“part.shp”,执行以下步骤:

  • 为part.shp添加字段number并计算number=[FID]+1,即number=1,2,3,…
  • 将part.shp按字段"number"split输出到文件夹split
  • 按照number建立对应名称的文件夹
  • 将前缀与number相同的文件复制至该文件夹中
# -*- coding: utf-8 -*-
import arcpy,os,re,shutil,sys,glob

#添加字段
arcpy.AddField_management("C:\Users\li\part.shp","number","TEXT","#","#","#","#","NON_NULLABLE","NON_REQUIRED","#")
#计算字段
arcpy.CalculateField_management("C:\Users\li\part.shp","number","[FID] +1","VB","#")
#创建文件夹split
path =r"C:\Users\li\split"
isExists = os.path.exists(path)  #判断文件是否存在
if not isExists:
    os.makedirs(path)
#按字段split后存入文件夹split
arcpy.Split_analysis("C:\Users\li\part.shp","C:\Users\li\part.shp","number","C:\Users\li\split","#")
##########################最佳方法#########################
for f in os.listdir(path):#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    if os.path.splitext(f)[1] == '.shp': 
        t=f.split(".")[0]  #将f的文件名以“.”隔开 并取第一个“.”前面的字符
        file_name = path + '\\' + t
        isExists = os.path.exists(file_name)  #判断文件是否存在
        if not isExists:
            os.mkdir(file_name)
        listglob = glob.glob(path+"/"+t+".*") #选出前缀与文件名相同的文件
        for filelist in listglob:
            fpath,fname=os.path.split(filelist) #分离文件名和路径
            #将前缀与文件名相同的文件转移至同名文件夹中
            shutil.copy(filelist,file_name)
'''
#####次级方法#####(原因:该方法不允许path里面已有文件夹,因为若存在,列表n为空,不存在n【0】
                     for f in os.listdir(path):#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    n = re.findall(r'(.+?)\.',f) #获取文件名前缀   
    file_name = path + '\\' + str(n[0])
    isExists = os.path.exists(file_name)  #判断文件是否存在
    if not isExists:
        os.mkdir(file_name)
######上6行代码也可替换为下面代码,区别在于:上6行根据文件名创建新文件夹;下面代码从1开始按数字顺序建名为数字的文件夹######
n = 0 
for f in os.listdir(path):#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。       
    if os.path.splitext(f)[1] == '.shp': #用os.path.split()函数来判断并获取文件的后缀名
        n=n+1
        file_name = path + '\\' + str(n)
        os.mkdir(file_name)
'''              

新手入门,用的都是最笨的办法,所以只能保证满足需要,没有优化,各路大神有更简洁的方法的话欢迎交流~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值