python - 如何使换行命令在从互联网打开的 .txt 文件中起作用?

标签 python replace runtime-error

我刚开始使用 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

我在 Internet 上搜索了有关该错误的信息,但没有找到与从 Internet 打开文件相关的任何内容。

我已经在这一点上停留了几个小时,不知道如何继续。 请帮忙! 提前致谢!

最佳答案

您的示例不起作用,因为 read 语句返回的数据是“字节对象”。您需要使用适当的编码对其进行解码。另请参阅 request.urlopen 的文档, file.readbyte array operations .

下面给出了一个完整的工作示例:

#!/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)

关于python - 如何使换行命令在从互联网打开的 .txt 文件中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772498/

相关文章:

asp.net - 运行时错误根本不知道该怎么办,我对这些事情没有经验

python - 自定义 distutils 命令

python - 遍历列表并在 Python 中漂亮地处理 StopIteration

python - 使用 lambda 的 Telegram 机器人 message_handler

Python-替换字典中键、值中的特殊字符

java - 在线程 "main"java.lang.NoSuchMethodError : main? 中不断收到异常

python - 具有多个 iPyWidgets 下拉菜单的交互式 Covid 绘图

python - 在 python 中的模式后添加文本

用于在查询中进行多次替换的 mysql 存储函数

java - ArrayAdapter.clear() 上的 NPE