Python read csv逐行读循环函数

2024-06-16 10:42:39 发布

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

我想用Python在googleapi搜索位置自动执行一个任务。现在,我使用googlemapsapi的代码正在返回一组地理坐标的places“hospital”。在

但是,我有一个包含许多地理坐标的CSV文件。在

1: Hanoi,10.762622,106.660172  
2: Ho Chi Minh,12.762622,108.660175  
3: Ho Chi Minh,11.8542,108.660175 
4: ...
5: ...

正如您在我的代码中看到的,这是不高效的,因为我需要手动更改地理坐标。在

对于CSV文件中的每一行(地理坐标),我希望我的代码读取地理坐标1:Hanoi,并给出该地理坐标的结果“hospitals”。读完第二排:胡志明,其他几行都一样。在

我怎样才能做到这一点,或者有什么好例子可以让这样的任务更有效率?在

^{pr2}$

Tags: 文件csv代码手动例子placesgoogleapi地理坐标
2条回答

利用Python的csv库来帮助读写CSV文件。另外,最好使用格式字符串来帮助将变量插入URL:

import csv
import urllib
import urllib.request
import json

googleGeocodeUrl = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query={}&location={},{}&radius=5000&key={}'
keyword = "hospital"
key = '123'

with open('input.csv', newline='') as f_input, open('hospital.csv', 'w', newline='') as f_output:
    csv_input = csv.reader(f_input)
    csv_output = csv.writer(f_output)
    csv_output.writerow(['Search place', 'Name', 'Lat', 'Long'])

    for search_place, lat, long in csv_input:
        url = googleGeocodeUrl.format(urllib.parse.quote(search_place), lat, long, key)
        json_response = urllib.request.urlopen(url)
        search = json_response.read().decode('utf-8')
        searchjson = json.loads(search)

        for place in searchjson['results']:
            row = [place['name'], place['geometry']['location']['lng'], place['geometry']['location']['lat']]
            csv_output.writerow(row)

格式字符串使用非常强大的迷你语言工作,但最简单的是,您只需添加{}作为要替换内容的占位符。对于每个使用的{},format在调用它时用匹配的参数替换它,例如

^{pr2}$

为此,您可以使用Python标准库中包含的csv库。在

具体来说,csv.DictReader()和{a2}

csv.DictReader()示例:

import csv

with open('places.csv', newline='') as f:
    reader = csv.DictReader(f, fieldnames=["place", "longitude", "latitude"])
    places = [row for row in reader]

for row in places:
    # your code here

csv.writer()示例:

^{pr2}$

此外,还可以使用urllib.parse.urlencode()从参数和值的dict自动生成参数字符串。在

相关问题 更多 >