2017-07-13 71 views
0

我的代碼旨在將.csv文件轉換爲.shp文件。我沒有收到任何錯誤消息,並且爲每個.csv創建了.shp,.shx和.dbf文件。但是,當我打開.dbf文件時,它們全部都是爲第一個.csv創建的.dbf的重複項。將csv轉換爲shp:複製shp爲多個csv

這裏是我的代碼:重複項

import glob 
import csv 
import shapefile as shp 
Lon, Lat, Count = [],[],[] 

for filename in glob.glob('C:/Users/brownk98/Downloads/GLM/Headers/*.csv'): 
    revFilename = 
    filename.replace('C:/Users/brownk98/Downloads/GLM/Headers\\*.csv', "") 
    rev2Filename = revFilename.replace(".csv", "") 
    out_file = rev2Filename + '_temp.shp' 

    with open(rev2Filename + '.csv') as f: 
     next(f) 
     r = csv.reader(f, delimiter=',') 
     #for i,row in enumerate(r): 
     for row in r: 
      #if i > 0: #skip header 
      Lon.append(float(row[0])) 
      Lat.append(float(row[1])) 
      Count.append(int(row[2])) 

     #f.close() 
    w = shp.Writer(shp.POINT) 
    w.autoBalance = 1 #ensures gemoetry and attributes match 
    w.field('Lon', "F",10,10) 
    w.field('Lat',"F",10,10) 
    w.field('Count',"N",10) 

    for j,k in enumerate(Lat): 
     w.point(Lon[j],Lat[j]) #write the geometry 
     w.record(Lon[j], Lat[j], Count[j]) #write the attributes 
    w.save(out_file) 

例如: 第一個文件

Lon     Lat   Count 
-135.0000000000 0.0000000000 13320 
-135.1523800000 0.3345030000 3 
-135.3058900000 0.6699620000 9 
-135.4605200000 1.0063680000 61 
-135.6163000000 1.3437130000 99 
-135.7732400000 1.6819870000 31 

第二個文件(所有其他文件看起來像這樣爲好)

Lon      Lat Count 
-135.0000000000 0.0000000000 13320 
-135.1523800000 0.3345030000 3 
-135.3058900000 0.6699620000 9 
-135.4605200000 1.0063680000 61 
-135.6163000000 1.3437130000 99 
-135.7732400000 1.6819870000 31 

文件2應該有不同的計數,比文件一,但我的代碼似乎只是copyin g從第一個文件到所有後續文件的計數。 我該如何解決這個問題?任何幫助,將不勝感激!

+0

[編輯]你的問題,並解釋_「所有的人都.DBF的副本」與輸出例 – stovfl

+0

如何添加在堆棧溢出文件_? @stovfl –

+0

@stovfl謝謝,我編輯過它。 –

回答

1

問題:...好像是從複製的第一個文件的計數到以後的所有文件...

你必須initalize Lon, Lat, Count = [],[],[]每個文件。

更改如下:

... 
for filename in glob.glob('C:/Users/brownk98/Downloads/GLM/Headers/*.csv'): 

    ... 

    with open(rev2Filename + '.csv') as f: 
     next(f) 
     r = csv.reader(f, delimiter=',') 

     Lon, Lat, Count = [],[],[] 

     for row in r: 
      ... 
+0

感謝您的幫助!這工作。 –