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

Python逐行复制文件添加右对齐行号时为何输出None

问题原因

你的代码输出None、达不到预期效果是多个逻辑错误叠加导致的:

  • 核心错误:print()函数没有业务返回值,执行后只会把内容打印到控制台,返回值固定是None。你把print()的返回值赋值给变量h,后续操作的h本质就是None,这就是输出结果全是None的根本原因。
  • 对齐逻辑错误:你是对存了None的h转字符串后做右对齐,根本没有对行号本身做4列右对齐处理,完全不符合需求。
  • 写入位置错误:g.write(str(j))写在for循环的外面,循环过程中j会被每一行的计算结果反复覆盖,最终只会保留最后一次循环的j值,前面所有行的内容全部丢失,根本不会写入文件。
  • 资源泄漏风险:直接用open()打开文件后没有手动调用close()关闭,可能出现写入内容没有刷入磁盘、文件句柄被长期占用的问题。
  • 换行处理问题:读取到的每行文本本身自带末尾换行符,后续拼接时如果不做处理很容易出现多余空行。
修正后的实现

推荐使用with上下文管理器处理文件读写,会自动完成文件关闭操作,不需要手动维护资源释放。对齐逻辑直接针对行号做4列右对齐,每行拼接完成后立刻写入目标文件即可:

fileA = input("Enter the filename 1: ")
fileB = input("Enter the filename 2: ")
lineNo = 0

# 同时打开两个文件,自动处理关闭逻辑
with open(fileA, 'r', encoding='utf-8') as f, open(fileB, 'w', encoding='utf-8') as g:
    for line in f:
        lineNo += 1
        # 行号转字符串后做4位右对齐,拼接行内容时去掉原行末尾换行避免重复空行
        content = f"{str(lineNo).rjust(4)}> {line.rstrip('\n')}\n"
        g.write(content)

如果习惯用格式化语法简化写法,拼接行的代码可以替换成更简洁的写法,效果完全一致:

content = f"{lineNo:4d}> {line.rstrip('\n')}\n"

如果需要同时在控制台看到输出效果,在g.write(content)下面加一行print(content, end='')即可,不要把print的返回值拿来做字符串拼接。

内容的提问来源于stack exchange,提问作者Steven Grullon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:36:25