For 循环将带有纬度和经度的 .csv 文件与 Dataclass 进行比较

Posted

技术标签:

【中文标题】For 循环将带有纬度和经度的 .csv 文件与 Dataclass 进行比较【英文标题】:For loop to compare a .csv file with Latitudes and longitudes to a Dataclass 【发布时间】:2021-07-22 11:56:08 【问题描述】:

正如标题所暗示的那样,由于我缺乏经验:(我实际上面临一个如何实际解决这个问题的问题,如下所示:

1.- 我有一个函数(内置在自定义 python 库中),它在传递 2 个参数(纬度和经度)后返回一个 Dataclass(例如在编号的项目符号下方)

2.- 我还有一个 .csv 文件,其中包含 2 个值,即纬度和经度。

3.- 我需要实际构建某种 for 循环来实际遍历整个 .csv 文件并将它们按顺序传递给上述函数,以便获取通过终端显示的所有响应/数据类,或者如果可能的话,将其传递到 .txt 文件或类似的文件中(无论哪个有效)。

实际的函数是这样调用的:

from apps.geo.address_list.servlet import retrieve retrieve_addresses_latlng

response = retrieve_addresses_latlng(33.593801,-112.230910)   ##here you simply pass it the lat,lng

这给了我们一个看起来像这样的数据类:

AddressData(country_code='US', administrative_area_level_1='US', county='San Diego County', postal_code='92056', 579068)

有了这个,我实际上需要能够以“顺序”的方式将我提到的 .csv 文件中的每个 lat,lng 传递给实际函数,以便根据需要多次触发函数并能够看到通过控制台或 .txt 文件的所有输出 :')

任何帮助或指导将不胜感激,因为我真的是编程新手,但我渴望了解更多关于这个神奇世界的信息:D

最好的问候和感谢您的帮助!

【问题讨论】:

【参考方案1】:

假设每组坐标位于 CSV 文件的单独一行,您可以执行以下操作:

from apps.geo.address_list.servlet import retrieve_addresses_latlng

with open('file.csv', 'r') as f:
    for line in f.readlines():
        lat, lng = line.split(',')
        data = retrieve_address_latlng(lat, lng)
        print(data)

这是从文件中逐行读取数据的非常简单的方法。您可以改用 CSV 解析库,但对于这个简单的示例,您将了解更多手动操作数据的内容。

此解决方案的“顺序”部分是for 循环,它遍历f.readlines() 提供的每组坐标(每行一个)。

【讨论】:

嗨@Jonathan Holvey!在这里感谢您的帮助!!但是,只缺少一件事:(当您尝试像 print(data) 一样打印它时,给出来自 retrieve_address_latlng 的响应是一个 Dataclass 我得到 None,None.... 关于如何实际打印的任何想法或解决方法数据类多次使用相同的for循环:O? 您可能需要对Dataclass 的单个实例进行试验,以确保它被正确创建。无,无表明属性设置不正确(假设该类知道如何将自己格式化为打印字符串)

以上是关于For 循环将带有纬度和经度的 .csv 文件与 Dataclass 进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 从导入的 csv 计算纬度/经度点之间的距离?

如何将 csv 中的纬度和经度数据导入 MySQL 中的点数据类型列

如何创建一个包含纬度和经度的数组并使用 for 循环在 android 中标记谷歌地图上的位置

使用 Haversine 包比较 csv 经度和纬度列表的所有距离可能性

如何将相同的纬度和经度分组以在画面中显示多个位置

带有纬度和经度的 CLLocation 对象