简体   繁体   English

Python,AttributeError:'float'对象没有属性'encode'

[英]Python, AttributeError: 'float' object has no attribute 'encode'

I have a script which consumes an API of bus location, I am attempting to parse the lat/lng fields which are float objects. 我有一个使用总线位置API的脚本,我试图解析作为浮点对象的lat / lng字段。 I am repeatedly receiving this error. 我一再收到这个错误。

row.append(Decimal(items['longitude'].encode('utf-16'))) AttributeError: 'float' object has no attribute 'encode' row.append(Decimal(items ['longitude'] .coding('utf-16')))AttributeError:'float'对象没有属性'encode'

# IMPORTS
from decimal import *

#Make Python understand how to read things on the Internet
import urllib2

#Make Python understand the stuff in a page on the Internet is JSON
import simplejson as json
from decimal import Decimal

# Make Python understand csvs
import csv

# Make Python know how to take a break so we don't hammer API and exceed rate limit
from time import sleep

# tell computer where to put CSV
outfile_path='C:\Users\Geoffrey\Desktop\pycharm1.csv'

# open it up, the w means we will write to it
writer = csv.writer(open(outfile_path, 'wb'))

#create a list with headings for our columns
headers = ['latitude', 'longitude']

#write the row of headings to our CSV file
writer.writerow(headers)


# GET JSON AND PARSE IT INTO DICTIONARY

# We need a loop because we have to do this for every JSON file we grab

#set a counter telling us how many times we've gone through the loop, this is the first time, so we'll set it at 1
i=1

#loop through pages of JSON returned, 100 is an arbitrary number
while i<100:
    #print out what number loop we are on, which will make it easier to track down problems when they appear
    print i
    #create the URL of the JSON file we want. We search for 'egypt', want English tweets, 
#and set the number of tweets per JSON file to the max of 100, so we have to do as little looping as possible
    url = urllib2.Request('http://api.metro.net/agencies/lametro/vehicles' + str(i))
    #use the JSON library to turn this file into a Pythonic data structure
    parsed_json = json.load(urllib2.urlopen('http://api.metro.net/agencies/lametro/vehicles'))
    #now you have a giant dictionary.
#Type in parsed_json here to get a better look at this. 
#You'll see the bulk of the content is contained inside the value that goes with the key, or label "results". 
#Refer to results as an index. Just like list[1] refers to the second item in a list, 
#dict['results'] refers to values associated with the key 'results'.
    print parsed_json



    #run through each item in results, and jump to an item in that dictionary, ex: the text of the tweet
    for items in parsed_json['items']:

     #initialize the row
         row = []
     #add every 'cell' to the row list, identifying the item just like an index in a list
#if latitude is not None:
    #latitude = str(latitude)
#if longitude is not None:
    #longitude = str(longitude)
    row.append(Decimal(items['longitude'].encode('utf-16')))
    row.append(Decimal(items['latitude'].encode('utf-16')))
     #row.append(bool(services['predictable'].unicode('utf-8')))
     #once you have all the cells in there, write the row to your csv
    writer.writerow(row)
    #increment our loop counter, now we're on the next time through the loop
    i = i +1
    #tell Python to rest for 5 secs, so we don't exceed our rate limit
    sleep(5)

encode is a method that strings have, not floats. encode是字符串具有的方法,而不是浮点数。

Change row.append(Decimal(items['longitude'].encode('utf-16'))) to row.append(Decimal(str(items['longitude']).encode('utf-16'))) and similar with the other line. row.append(Decimal(items['longitude'].encode('utf-16')))更改为row.append(Decimal(str(items['longitude']).encode('utf-16')))和其他线类似。

encode is available only for string. encode仅适用于字符串。 In your case item['longitude'] is a float. 在你的情况下,项目['经度']是一个浮点数。 float doesn't have encode method. float没有编码方法。 You can type case it and then use encode. 您可以键入case然后使用encode。 You can write like, 你可以这样写,

str(items['longitude']).encode('utf-16')
str(items['latitude']).encode('utf-16')

I think you can't pass an encoded string to Decimal object. 我认为你不能将编码的字符串传递给Decimal对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AttributeError: 'list' object 在 Python 上没有属性 'encode' - AttributeError: 'list' object has no attribute 'encode' on Python AttributeError: &#39;tuple&#39; 对象没有属性 &#39;encode&#39; python - AttributeError: 'tuple' object has no attribute 'encode' python python:AttributeError:浮动对象没有属性“介于” - python: AttributeError: float object has no attribute 'between' Python AttributeError:“ tuple”对象在hashlib.encode中没有属性“ encode” - Python AttributeError: 'tuple' object has no attribute 'encode' in hashlib.encode 如何解决AttributeError:&#39;NoneType&#39;对象在python中没有属性&#39;encode&#39; - How to resolve AttributeError: 'NoneType' object has no attribute 'encode' in python AttributeError:&#39;tuple&#39;对象没有属性&#39;encode&#39;python gui - AttributeError: 'tuple' object has no attribute 'encode' python gui AttributeError: 'tuple' object 没有属性 'encode' - MySQL.connector.Python - AttributeError: 'tuple' object has no attribute 'encode' - MySQL.connector.Python AttributeError:&#39;tuple&#39;对象没有属性&#39;encode&#39; - MySQLdb Python - AttributeError: 'tuple' object has no attribute 'encode' - MySQLdb Python AttributeError:“ NoneType”对象没有带有lxml-python的属性“ encode” - AttributeError: 'NoneType' object has no attribute 'encode' with lxml-python AttributeError: 'bool' object 没有属性 'encode',使用 Apache Cassandra 和 ZA7F57F35426B56382411 - AttributeError: 'bool' object has no attribute 'encode', using Apache Cassandra and Python
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM