iT邦幫忙

1

Python 的註解與錯誤訊息

請問我寫的註解正確嗎 ?

import requests  # 先引入 requests 模組 , 才可以從網上下載資料
html=requests.get('https://tcgbusfs.blob.core.windows.net/blobyoubike/YouBikeTP.json')
# 使用 GET 方式下載普通網頁 , 存到 html 變數
html.encoding="UTF-8"
"""
UTF-8
1. 支援所有語言文字,還有一些怪怪圖形
"""
list1=eval(html.text)
#eval() 函數用來執行一個字符串表達式,並返回表達式的值。抓取網上資料存成 list1

for dict in list1: # 取出字典的內容
    listvalues=list(dict.values()) #列出字典的值 , 存到 listvalues
    print(listvalues) # 列印 listvalues

屬性錯誤訊息 , 是因為字串中沒有值嗎 ?


  File "D:/request.py", line 19, in <module>
    listvalues=list(dict.values()) #列出字典的值 , 存到 listvalues

AttributeError: 'str' object has no attribute 'values'
看更多先前的討論...收起先前的討論...
ccutmis iT邦高手 2 級 ‧ 2019-08-27 11:07:33 檢舉
錯誤訊息裡面講得很清楚了 'str' 物件 沒有 'values'這個屬性
還有你在前面get(...)得到的內容是json格式 那為何不直接去解析json 而是要轉成str再處理?
kevin543 iT邦新手 5 級 ‧ 2019-08-27 11:19:04 檢舉
解析json 用 http://jsoneditoronline.org/ 這個嗎 ? 剛學聽不太懂 , 上面程式不是我寫的 , 是抄網路上的 , 我想了解它的內容 , 所以練習寫註解
kevin543 iT邦新手 5 級 ‧ 2019-08-27 11:19:39 檢舉
可以下面回答嗎 ? 這裡無法貼圖
ccutmis iT邦高手 2 級 ‧ 2019-08-27 11:29:29 檢舉
如果你是純新手 那應該是找適合你程度的教學循序漸進的學 而不是未學走先學跑
這裡有一些基本的東西推薦您先看看 https://ithelp.ithome.com.tw/articles/10211960
或是搜一下IT邦鐵人賽歷年文章應該會有蠻多可以學的
kevin543 iT邦新手 5 級 ‧ 2019-08-27 12:41:21 檢舉
我們老師才再教迴圈 , 只是專題一個月後要產出 , 所以現在先準備讀出資料
ccutmis iT邦高手 2 級 ‧ 2019-08-27 13:40:47 檢舉
現在還在教廻圈 專題一個月後要產出 你是在學校還是電腦補習班啊!? o_o"
kevin543 iT邦新手 5 級 ‧ 2019-08-27 22:15:19 檢舉
補習班
ccutmis iT邦高手 2 級 ‧ 2019-08-27 22:50:29 檢舉
恩~加油
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
dragonH
iT邦超人 5 級 ‧ 2019-08-27 11:30:13
最佳解答

你可以把你的 code 改成

...(上略)
for dict in list1: # 取出字典的內容
  print(type(dict))
  #listvalues=list(dict.values()) #列出字典的值 , 存到 listvalues
  #print(listvalues) # 列印 listvalues

會看到 dict 的 type 是 str

然後你再用

dir(str)

會發現 str 沒有 values 這個 attribute

這也是 console 要跟你說的

然後像 ccutmis大 說的

直接用 json 去解就好

看更多先前的回應...收起先前的回應...
ccutmis iT邦高手 2 級 ‧ 2019-08-27 11:30:41 檢舉

/images/emoticon/emoticon12.gif

import json
import requests
html=requests.get('https://tcgbusfs.blob.core.windows.net/blobyoubike/YouBikeTP.json')
html.encoding="UTF-8"
json_array = json.loads(html.text)
for i in json_array["retVal"]:
	print(json_array["retVal"][str(i)]["sna"],json_array["retVal"][str(i)]["lat"],json_array["retVal"][str(i)]["lng"])

我本來想簡單的寫個json解析的範例 但是看到樓主好像是新手就有點不知有沒有貼出來的必要了 借兄台的留言區貼一下...

dragonH iT邦超人 5 級 ‧ 2019-08-27 11:38:03 檢舉

/images/emoticon/emoticon82.gif

kevin543 iT邦新手 5 級 ‧ 2019-08-27 12:39:27 檢舉

謝謝回復 , 我如果要把輸出轉成 excel , 要如何加 , 我寫了一些 , 是哪裡要修正的

import xlwt
import json
import requests
book=xlwt.workbook(encoding='utf-8',style_compression=0)
html=requests.get('https://tcgbusfs.blob.core.windows.net/blobyoubike/YouBikeTP.json')
html.encoding="UTF-8"
sheet=book.add_sheet('mysheet',cell_overwrite_ok=True)
sheet.write(0,0,'mytext')
book.save('/users/kevin/desktop/test.xls')
json_array = json.loads(html.text)
for i in json_array["retVal"]:
	print(json_array["retVal"][str(i)]["sna"],json_array["retVal"][str(i)]["lat"],json_array["retVal"][str(i)]["lng"])
dragonH iT邦超人 5 級 ‧ 2019-08-27 13:09:18 檢舉

首先

把你的 debug console 拉大

執行遇到錯誤訊息

就把錯誤訊息 google

找解決方法

然後

依照 xlwt 的 api doc

去調用他的 function

來達到你的目的

ccutmis iT邦高手 2 級 ‧ 2019-08-27 13:36:46 檢舉

建議樓主盡量避免發生在A問題裡問B問題這種情況...
/images/emoticon/emoticon77.gif

=======================
以下是你問的存成xls的範例:

import xlwt
import json
import requests

from tempfile import TemporaryFile
book = xlwt.Workbook()
sheet = book.add_sheet('mysheet',cell_overwrite_ok=True)
sheet.write(0,0,"站名")
sheet.write(0,1,"經度")
sheet.write(0,2,"緯度")
html=requests.get('https://tcgbusfs.blob.core.windows.net/blobyoubike/YouBikeTP.json')

html.encoding="UTF-8"
json_array = json.loads(html.text)
row=1
for i in json_array["retVal"]:
	print(row)
	print(json_array["retVal"][str(i)]["sna"],json_array["retVal"][str(i)]["lat"],json_array["retVal"][str(i)]["lng"])
	sheet.write(row,0,json_array["retVal"][str(i)]["sna"])
	sheet.write(row,1,json_array["retVal"][str(i)]["lat"])
	sheet.write(row,2,json_array["retVal"][str(i)]["lng"])
	row=row+1
name = "YouBikeTP.xls"
book.save(name)
book.save(TemporaryFile())
print(name+" 儲存完畢!")

ps.我個人存檔xls都是用pandas處理 因為它有提供很方便的函式 例如to_excel to_csv 之類的 可以直接把二維陣列存成指定檔案格式
用xlwt還要處理行跟列太麻煩了

========
這串原本樓主提的問題 邦友DragonH已給完善的建議 後續我就不回覆了...

kevin543 iT邦新手 5 級 ‧ 2019-08-27 23:25:11 檢舉

謝謝你的熱心解答 , 我在了解看看程式是怎麼寫的

我要發表回答

立即登入回答