【代碼】批量 CSV轉SHP

import os
import csv
import codecs
import shapefile

# 實現csv到shp的轉變
def trans_point(file_name, output_name):
    # 新建一個矢量文件
    out_shp = shapefile.Writer(output_name, shapefile.POINT)
    out_shp.autoBalance = 1
    
    # 創建字段名稱 
    out_shp.field('TreeID','F',10,8) # string, max-length
    out_shp.field('TreeLocationX', 'F', 10, 8) # float
    out_shp.field('TreeLocationY', 'F', 10, 8) # float
    out_shp.field('TreeHeight','F',10,8) # string, max-length
    out_shp.field('CrownDiameter','F',10,8)
    out_shp.field('CrownArea','F',10,8) # string, max-length
    counter = 1
    with codecs.open(file_name, 'rb', 'utf-8') as csvfile:
        reader = csv.reader(csvfile, delimiter=',')
        # 跳過首行
        next(reader, None)

        for row in reader:
            try:
               TreeID = int(row[0])
               x_loc = float(row[1])
               y_loc = float(row[2])
               height = float(row[3])
               diameter = float(row[4])
               area = float(row[5])
               out_shp.point(x_loc, y_loc)
               out_shp.record(TreeID, x_loc, y_loc, height, diameter, area)
               counter = counter + 1
            except:
                print('error')
                print(row)
             
def getFileName(path):
    # 獲取指定目錄下的指定後綴的文件名
    f_list = os.listdir(path)
    out_list = []
    for i in f_list:
        if os.path.splitext(i)[1]=='.csv':
            out_list.append(i)
    return out_list

if __name__ == '__main__':
    root_dir = 'E:/Dataset/NEON/process/1/'
    csv_list = getFileName(root_dir)
    for name in csv_list:
        pth = os.path.join(root_dir,name)
        out_name = name+'_point.shp'
        out = root_dir+'/point_shp'
        out_pth = os.path.join(out,out_name)
        trans_point(pth, out_pth)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章