首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python读取csv逐行读取和循环函数

Python读取csv逐行读取和循环函数
EN

Stack Overflow用户
提问于 2018-05-31 10:56:56
回答 2查看 2.5K关注 0票数 0

我想使用Google搜索位置来自动化Python中的一个任务。现在,我用Google编写的代码正在为一组地理坐标返回地名“医院”。

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

代码语言:javascript
复制
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,并给出这个地理坐标的结果“医院”。后读第2行:胡志明和所有其他行相同。

我如何才能做到这一点或任何好的例子,使这样的任务更有效率?

代码语言:javascript
复制
import urllib
import urllib.request
import json

googleGeocodeUrl = 'https://maps.googleapis.com/maps/api/place/textsearch/json?query='
keyword = "hospital"
geolocation = "&location=-12.135,-77.023&radius=5000"
APIKEY = '&key='+'apikey'

url = googleGeocodeUrl + keyword + geolocation + APIKEY
print(url)

url = googleGeocodeUrl + keyword + geolocation + APIKEY
json_response = urllib.request.urlopen(url)
search = json_response.read().decode('utf-8')
searchjson = json.loads(search)

export = open('hopital.csv','w')
for place in searchjson['results']:
    print(place['name'])
    print(place['geometry']['location'])
export.write(place['name']+','+str(place['geometry']['location']['lng'])\
 +','+str(place['geometry']['location']['lat'])+'\n')
export.close() 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 12:17:58

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
'test{}'.format(123)
'lat is {}, long is {}'.format(123, 456)
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 11:43:03

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

具体来说,csv.DictReader()csv.writer()

csv.DictReader() 示例:

代码语言:javascript
复制
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() 示例:

代码语言:javascript
复制
import csv

with open('hopital.csv','w', newline='') as f:
    writer = csv.writer(f)
    for place in searchjson['results']:
        writer.writerow([place['name'],
            str(place['geometry']['location']['lng']),
            str(place['geometry']['location']['lat'])])

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50622697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档