我是一名初學Python用戶,並且遇到了麻煩,理解了一些事情。我想在.csv文件中將2整列(lat,long)從度分秒(dms)轉換爲十進制度(dd)(即46°57'01「N到46.950278)。目前爲止,我已將我的.csv中的標題重命名爲可在ArcGIS中讀取,然後我使用Excel將°,'和N「替換爲空格,然後放入他們在一個新的.csv文件與他們各自的ID號(Acc_num)...想使用Python,但無法弄清楚我的生活。然後我用逗號替換空格以便能夠轉換每個節的座標。我也做了一個def將dms轉換爲dd,將dm轉換爲dd並將d轉換爲dd ...這樣做是因爲我的一些座標只有度數,有些只有度數分鐘。這是我的.csv文件當前格式的概述:Python,將成千上萬條記錄的.csv批量轉換度分秒數轉換爲十進制度
Acc_num lat long
881138 80,24 87,38
882273 68,40 141
889843 56,55,28 91,49,02
787004 48 91,58
我不知道怎麼我的DEFS適用於.csv文件做最後轉化爲DD。我需要保持列表的順序相同,因爲我想將這些列重新插入原始的,更詳細的.csv。
這是我到目前爲止有:
import csv
from itertools import izip
filename = r'C:\workspace\code\hl.csv'
filename_comma = r'C:\workspace\code\hundlich4.csv'
def dms_dd(degrees, minutes, seconds):
decimal = 0.0
if (degrees >= 0):
decimal = degrees + float(minutes)/60 + float(seconds)/3600
else:
decimal = degrees - float(minutes)/60 - float(seconds)/3600
return decimal
def dm_dd(degrees, minutes):
decimal = 0.0
if (degrees >= 0):
decimal = degrees + float(minutes)/60
else:
decimal = degrees - float(minutes)/60
return decimal
def d_dd(degrees):
decimal = 0.0
if (degrees >= 0):
decimal = degrees
else:
decimal = degrees
return decimal
accession = []
latitudes = []
longitudes = []
f = open(filename)
for line in f:
cells = line.split(',')
accession.append((cells[0]))
latitudes.append((cells[1]))
latitudes = [w.replace(' ', ',') for w in latitudes]
longitudes.append((cells[2]))
longitudes = [w.replace(' ', ',') for w in longitudes]
longitudes = [w.replace('\n', '') for w in longitudes]
#puts commas where spaces are for the coordinates
f.close()
with open('C:\workspace\code\hundlich4.csv', 'wb') as fn:
writer = csv.writer(fn)
writer.writerows(izip(accession, latitudes, longitudes))
#writes columns with commas to a new csv called hundlich4.csv
而現在我已經在做這個,我知道這是錯的,但我不知道該怎麼辦的轉換讓我defs應用。
accession2 = []
latitudes2 = []
longitudes2 = []
ff = open(filename)
for line in ff:
cells = line.split(',')
accession2.append((cells[0]))
latitudes2.append((cells[1]))
for val in latitudes2:
dms_dd(val)
longitudes2.append((cells[2]))
#longitudes2 = [w.replace(dms_dd(val) for w in longitudes]
ff.close()
任何幫助非常感謝!謝謝!
,值之間用空格分隔,但在你的代碼,它們之間用逗號separeted 。哪一個是正確的? – Daniel