2017-07-25 21 views
0

最近私は、NOAAのウェブサイトからMETARを取得し、METARデータをスライスして印刷するプロジェクトに取り組んできました。.find()は文字列を受け取りませんか? Python 3.6

File "/Users/MrZeus/Desktop/PY3.6_PROJECT/version_1.py", line 22, in daMainProgram 
    data_start = website_html.find("<--DATA_START-->") 
TypeError: a bytes-like object is required, not 'str' 

私はこのエラーが何を言っているか理解して実行します。今、私は.find()にMETARデータの開始は、それが私にこのエラーメッセージを表示しますsatesマーカーをしようとすると、Python3.6にコードを変更するなどの問題が発生しました。それは.find()が文字列を取らないことを意味しますが、Pythonのドキュメントによれば、.find()関数は文字列を取ります! the documentation, it takes a bytes-like object or an intを1として

website = urllib.request.urlopen(airid) 

website_html = website.read() 

print(website_html) 

br1_string = "<!-- Data starts here -->" 

data_start = website_html.find(br1_string) 

br1 = data_start + 25 

br2 = website_html.find("<br />") 

metar_slice = website_html[br1:br2] 

print("Here is the undecoded METAR data:\n"+metar_slice) 

答えて

1

HTTPResponce.read()は、bytesオブジェクトを返します。 bytesメソッド(.findなど)には、タイプbytesの引数が必要です。

あなたはbytesオブジェクトにbr1_stringを変更することができ、次のいずれか

br1_string = b"<!-- Data starts here -->" 

や、応答をデコード:

website_html = website.read().decode() 
+0

はsoooooooがありがとうございました!! –

1

:ここ

は、私はとのトラブルを抱えていたコードのセクションです。

ここには、strbytesの2種類があります。どちらも方法は.findです。間違ってしまうのは簡単です。 website_htmlファイルは実際にはbytesで、strではありません。

関連する問題