我有一个文本文件,里面装满了twitter api提供的地方数据。以下是2行的样本数据
{'country': 'United Kingdom', 'full_name': 'Dorridge, England', 'id': '31fe56e2e7d5792a', 'country_code': 'GB', 'name': 'Dorridge', 'attributes': {}, 'contained_within': [], 'place_type': 'city', 'bounding_box': {'coordinates': [[[-1.7718518, 52.3635912], [-1.7266702, 52.3635912], [-1.7266702, 52.4091167], [-1.7718518, 52.4091167]]], 'type': 'Polygon'}, 'url': 'https://api.twitter.com/1.1/geo/id/31fe56e2e7d5792a.json'}
{'country': 'India', 'full_name': 'New Delhi, India', 'id': '317fcc4b21a604d5', 'country_code': 'IN', 'name': 'New Delhi', 'attributes': {}, 'contained_within': [], 'place_type': 'city', 'bounding_box': {'coordinates': [[[76.84252, 28.397657], [77.347652, 28.397657], [77.347652, 28.879322], [76.84252, 28.879322]]], 'type': 'Polygon'}, 'url': 'https://api.twitter.com/1.1/geo/id/317fcc4b21a604d5.json'}
我想要' country',' name'并且' cordinates'为了做到这一点,我们需要逐行迭代整个文件。所以我将每一行附加到一个列表
data = []
with open('place.txt','r') as f:
for line in f:
data.append(line)
当我检查数据类型时,它显示为' str'而不是' dict'。
type(data[0])
str
data[0].keys()
AttributeError: 'str' object has no attribute 'keys'
如何解决此问题,以便将其保存为词典列表。
最初的推文是通过以下代码进行编码和解码的:
f.write(jsonpickle.encode(tweet._json, unpicklable=False) + '\n') #encoded and saved to a .txt file
tweets.append(jsonpickle.decode(line)) # decoding
地方数据文件通过以下代码保存:
fName = "place.txt"
newLine = "\n"
with open(fName, 'a', encoding='utf-8') as f:
for i in range(len(tweets)):
f.write('{}'.format(tweets[i]['place']) +'\n')
答案 0 :(得分:2)
在您的情况下,您应该使用json
进行数据解析。但是如果你遇到json
的问题(由于我们讨论API这几乎是不可能的),那么通常可以从字符串转换为字典:
>>> import ast
>>> x = "{'country': 'United Kingdom', 'full_name': 'Dorridge, England', 'id': '31fe56e2e7d5792a', 'country_code': 'GB', 'name': 'Dorridge', 'attributes': {}, 'contained_within': [], 'place_type': 'city', 'bounding_box': {'coordinates': [[[-1.7718518, 52.3635912], [-1.7266702, 52.3635912], [-1.7266702, 52.4091167], [-1.7718518, 52.4091167]]], 'type': 'Polygon'}, 'url': 'https://api.twitter.com/1.1/geo/id/31fe56e2e7d5792a.json'}
"
>>> d = ast.literal_eval(x)
>>> d
d
现在是字典而不是字符串。
但是如果你的数据是json格式,python有一个内置的lib来处理json格式,并且使用json比使用j更好更安全。
例如,如果您收到回复,请说resp
,您可以这样做:
response = json.loads(resp)
现在您可以将response
解析为字典。
答案 1 :(得分:1)
注意:单引号无效JSON。
我从未尝试过Twitter API。看起来您的数据无效JSON。这是一个简单的预处理方法,将canvas
(单引号)替换为'
(双引号)
"
答案 2 :(得分:1)
您应该使用python json库进行解析并获取值。 在python中它很容易。
import json
x = '{"country": "United Kingdom", "full_name": "Dorridge, England", "id": "31fe56e2e7d5792a", "country_code": "GB", "name": "Dorridg", "attributes": {}, "contained_within": [], "place_type": "city", "bounding_box": {"coordinates": [[[-1.7718518, 52.3635912], [-1.7266702, 52.3635912], [-1.7266702, 52.4091167], [-1.7718518, 52.4091167]]], "type": "Polygon"}, "url": "https://api.twitter.com/1.1/geo/id/31fe56e2e7d5792a.json"}'
y = json.loads(x)
print(y["country"],y["name"],y["bounding_box"]["coordinates"])
答案 3 :(得分:0)
您可以使用此列表
mlist= list()
for i in ndata.keys():
mlist.append(i)