Python 逐行读取csv和循环函数
Python read csv read row by row and loop fuction
我想使用 Google API 搜索地点自动执行 Python 中的任务。现在,我的 Google 地图 API 代码正在为一组地理坐标返回地点 '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:河内并为我提供此地理坐标的结果 'hospitals'。阅读第 2 行后:胡志明市和所有其他行相同。
我怎样才能做到这一点,或者有什么好的例子可以使这样的任务更有效率?
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()
为此,您可以使用 Python 标准库中包含的 csv
库。
具体来说,csv.DictReader() and csv.writer()
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()
示例:
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() 从参数和值的字典自动生成参数字符串。
利用 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)
格式字符串使用非常强大的迷你语言工作,但最简单的是,您只需添加 {}
作为您要替换的内容的占位符。对于每个使用的 {}
,格式在调用时将其替换为匹配的参数,例如
'test{}'.format(123)
'lat is {}, long is {}'.format(123, 456)
我想使用 Google API 搜索地点自动执行 Python 中的任务。现在,我的 Google 地图 API 代码正在为一组地理坐标返回地点 '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:河内并为我提供此地理坐标的结果 'hospitals'。阅读第 2 行后:胡志明市和所有其他行相同。
我怎样才能做到这一点,或者有什么好的例子可以使这样的任务更有效率?
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()
为此,您可以使用 Python 标准库中包含的 csv
库。
具体来说,csv.DictReader() and csv.writer()
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()
示例:
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() 从参数和值的字典自动生成参数字符串。
利用 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)
格式字符串使用非常强大的迷你语言工作,但最简单的是,您只需添加 {}
作为您要替换的内容的占位符。对于每个使用的 {}
,格式在调用时将其替换为匹配的参数,例如
'test{}'.format(123)
'lat is {}, long is {}'.format(123, 456)