3

Pythonを使い始めたばかりで、インターネット「www……/lyrics.txt」から開いた画面に曲の歌詞を書き込むプログラムを作ろうとしています。私の最初のコード:

    import urllib.request
    lyrics=urllib.request.urlopen("http://hereIsMyUrl/lyrics.txt")
    text=lyrics.read()
    print(text)

このコードを有効にすると、ウェブサイトに書かれている歌詞が表示されませんでした。改行する必要があるすべての場所で改行コマンド '\r\n' が表示され、すべての歌詞が表示されました。長い乱雑な文字列で。例: ここにいくつかの歌詞\r\nこれはすでに次の行になっているはずです\r\nなど。

「\r\n」コマンドを新しい行に置き換えるコードをインターネットで検索し、次のことを試しました。

    import urllib.request
    lyrics=urllib.request.urlopen("http://hereIsMyUrl/lyrics.txt")
    text=lyrics.read()
    text=text.replace("\r\n","\n")
    print(text)

少なくとも何かを置き換えることを望んでいましたが、代わりに実行時エラーが発生しました。

    TypeError: expected bytes, bytearray or buffer compatible object

そのエラーについてインターネットを検索しましたが、インターネットからファイルを開くことに関連するものは見つかりませんでした。

この時点で何時間も立ち往生しており、続行する方法がわかりません。助けてください!前もって感謝します!

4

3 に答える 3

8

readステートメントによって返されるデータは「バイトオブジェクト」であるため、例は機能しません。適切なエンコーディングを使用してデコードする必要があります。request.urlopenfile.readおよびバイト配列操作のドキュメントも参照してください。

完全な動作例を以下に示します。

#!/usr/bin/env python3

import urllib.request

# Example URL
url = "http://ntl.matrix.com.br/pfilho/oldies_list/top/lyrics/black_or_white.txt"

# Open URL: returns file-like object
lyrics = urllib.request.urlopen(url)

# Read raw data, this will return a "bytes object"
text = lyrics.read()

# Print raw data
print(text)

# Print decoded data:
print(text.decode('utf-8'))

# If you still need newline conversion, you could use the following
text = text.decode('utf-8')
text = text.replace('\r\n', '\n')
print(text)
于 2013-04-02T19:51:39.433 に答える
0

Python 3.2では、次のように機能します。

import urllib.request
lyrics=urllib.request.urlopen("http://google.com/")
text=str(lyrics.read())
text=text.replace("\r\n","\n")
print(text)

主な違いは、literally.read() が文字列ではなくバイト オブジェクトを返し、replace() が処理方法を知らなかったことです。置換を実行する前にこれを str() でラップすると機能します。

于 2013-04-02T19:56:55.910 に答える