You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何逐行打印在线TXT文件?解决代码输出字符而非行的问题

问题分析与解决方法

你遇到的问题很典型——当你使用.read().decode()获取整个文本内容后,得到的是一个完整的字符串,直接遍历这个字符串时,Python会默认逐个字符迭代,所以才会出现逐字符打印的结果。

下面给你两种可行的修改方案,根据你的需求选择即可:

方案一:分割字符串为行列表

如果文件体积不大,可以先把整个内容按换行符分割成每行的列表,再遍历打印:

import urllib.request, urllib.parse, urllib.error
headers = {'User-Agent': '''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'''} 
url = 'https://www.py4e.com/code3/mbox.txt'
req = urllib.request.Request(url, headers=headers)
# 读取并解码为字符串后,按换行分割成行列表
fname = urllib.request.urlopen(req).read().decode()
lines = fname.splitlines()
for line in lines:
    print(line)

splitlines()方法会自动处理不同系统的换行符(\n、\r\n等),比直接用split('\n')更可靠。

方案二:逐行读取类文件对象(更高效)

urlopen()返回的响应对象是类文件对象,支持直接逐行迭代,不需要一次性加载全部内容,内存占用更低,适合大文件场景:

import urllib.request, urllib.parse, urllib.error
headers = {'User-Agent': '''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'''} 
url = 'https://www.py4e.com/code3/mbox.txt'
req = urllib.request.Request(url, headers=headers)
# 使用with上下文管理自动关闭连接
with urllib.request.urlopen(req) as response:
    for line in response:
        # 每行是字节串,先解码为字符串,strip()去掉多余的换行符
        print(line.decode().strip())

这里用with语句可以确保请求完成后自动关闭连接,避免资源泄漏;strip()是为了避免print自带的换行和文本本身的换行重复导致空行。

内容的提问来源于stack exchange,提问作者Jieyu Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:22:32