使用CSV中的数据为API数据拉取迭代url-Python



我在一列CSV文件中有大约20000个邮政编码。我正试图通过API从这些邮政编码中提取一些地理选举数据。此API的url向结尾迭代(每次迭代的邮政编码都会发生变化(。我尝试了许多不同的代码示例,但都不起作用。

编辑:在下面粘贴一个我现在知道不起作用的示例,主要是因为我不需要条形函数。然而,如何让循环直接从CSV文件中提取邮政编码?还粘贴我收到的错误消息。


responses = list()
with open("testpostal.csv") as f:
for postal in map(str.strip,f):     
rrr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postal))
data = json.loads(rrr.text)
responses.append(data)
print(responses)


JSONDecodeError                           Traceback (most recent call last)
<ipython-input-182-05e370407e9c> in <module>()
9     for postal in map(str.strip,f):
10         rrr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postal))
---> 11         data = json.loads(rrr.text)
12         responses.append(data)
13 
~/anaconda3/lib/python3.7/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
346             parse_int is None and parse_float is None and
347             parse_constant is None and object_pairs_hook is None and not kw):
--> 348         return _default_decoder.decode(s)
349     if cls is None:
350         cls = JSONDecoder
~/anaconda3/lib/python3.7/json/decoder.py in decode(self, s, _w)
335 
336         """
--> 337         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
338         end = _w(s, end).end()
339         if end != len(s):
~/anaconda3/lib/python3.7/json/decoder.py in raw_decode(self, s, idx)
353             obj, end = self.scan_once(s, idx)
354         except StopIteration as err:
--> 355             raise JSONDecodeError("Expecting value", s, err.value) from None
356         return obj, end
JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Python提供了一个CSV模块,您可以使用它执行以下操作:

import csv,requests
URL = 'https://represent.opennorth.ca/postcodes/%s'
responses = []
with open("testpostal.csv") as csv_file:
csv_reader = csv.reader(csv_file)
for row in csv_reader:
responses.append(requests.get(URL % row[0]).json())

这将跳过解析CSV文件的麻烦。如果我使用没有空格的加拿大邮政编码,以上代码对我有效。

包括您得到的错误,这些错误将为您指明正确的方向。不过,对于初学者来说,

map(str.strip, f) 

可能没有任何意义。

使用strip函数时,应该包括要"strip"的内容以及要从中剥离的字符串。例如,本教程中的

str = "0000000this is string example....wow!!!0000000";
print str.strip( '0' )

退货:

this is string example....wow!!!

好吧,所以我发现我做错了什么。我只是让python将csv列作为列表读取,然后使用for循环以json格式获取结果。粘贴下面的代码,以防对任何人都有帮助:

import csv
with open('PC2.csv','r') as f:
lines = f.read()
list = lines.split('n')
postcodes = list #not really necessary but I wanted to preserve specific names
response = []
for postcode in postcodes:
rr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postcode))
data = json.loads(rr.text)
response.append(data)

print(response)

最新更新