Python,在一个有数千条记录的.csv中批量转换度-分-秒到十进制度数

2024-09-30 12:33:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个初级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文件当前格式的概述:

Acc_num    lat      long
881138    80,24     87,38
882273    68,40     141
889843    56,55,28  91,49,02
787004    48        91,58

我不知道如何将我的def应用到.csv文件中,以完成对dd的最终转换。我需要保持列表的相同顺序,因为我想将这些列重新插入到原始的更详细的.csv中。在

以下是我目前所掌握的情况:

^{pr2}$

现在我一直在研究这个问题,我知道这是错误的,但是我不知道该怎么做才能应用我的def。在

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()

非常感谢任何帮助!谢谢您!在


Tags: 文件csvinfordefdmsvaldd
1条回答
网友
1楼 · 发布于 2024-09-30 12:33:11

首先,编写一个转换一行输入的函数,然后在输入行上循环:

import csv
filename = r'C:\workspace\code\hl.csv'
filename_decimal = r'C:\workspace\code\hundlich4.csv'

def dms_dd(degrees, minutes=0, seconds=0):
    if degrees >= 0:
        decimal = degrees + minutes/60.0 + seconds/3600.0
    else:
        decimal = degrees - minutes/60.0 - seconds/3600.0
    return decimal

def convert_line(data):
    return data[0], dms_dd(*map(float,data[1].split())), dms_dd(*map(float, data[2].split()))

with open(filename) as inf:
    reader = csv.reader(inf)
    with open(filename_decimal) as outf:
        writer = csv.writer(outf)
        writer.write(next(reader)) # header
        for line in reader:
            writer.write(convert_line(line))

相关问题 更多 >

    热门问题