You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中复制特定行?附无报错代码求助

问题排查:Python复制特定行功能未生效

嘿,我来帮你揪出代码里的问题!你的代码运行没报错,但复制行的功能完全没起作用,核心原因是你写的复制逻辑根本没有实际执行写入文件的操作,而且逻辑本身也和你的需求不匹配。

先看看你原来的代码:

import sys
from math import log
import datetime
import numpy as np
from itertools import repeat
x = 1
y = 2
z= 24
T=int(z/(x+y))
with open('A.txt', 'r') as f:
    lines = f.readlines()
with open('A.txt', 'w') as f:
    for i,line in enumerate(lines):
        if i==10:
            f.write(str("Papa")+'\n')
            f.write(str(x)+ "*31 /"+'\n')
            f.write(str("Mama")+'\n')
            f.write(str(y)+ "*31 /"+'\n')
            [x for item in lines for x in repeat(item, T)]  # 这里是无效代码
        else:
            f.write(line)

问题拆解

  1. 无效的列表推导式
    你写的[x for item in lines for x in repeat(item, T)]只是生成了一个包含所有行重复T次的列表,但你既没有把这个列表赋值给变量,也没有遍历它将内容写入文件。这行代码相当于“做了一堆工作但全扔了”,完全不会影响输出文件。

  2. 逻辑偏离需求
    这个推导式是遍历整个文件的所有行并重复,而不是针对你要操作的特定行(i==10的那一行),就算你后续处理这个列表,也会把所有行都重复写入,和你“复制特定行”的需求不符。

修正方案

假设你的需求是:遍历到第10行(注意enumerate从0开始计数,i==10对应文件的第11行)时,先写入你指定的Papa、计算式等内容,然后将当前的第10行重复T次写入文件,之后继续处理其他行。修正后的代码如下:

import sys
from math import log
import datetime
import numpy as np
from itertools import repeat
x = 1
y = 2
z= 24
T=int(z/(x+y))  # 计算得T=8

with open('A.txt', 'r') as f:
    lines = f.readlines()

with open('A.txt', 'w') as f:
    for i,line in enumerate(lines):
        if i == 10:
            # 先写入你指定的内容
            f.write("Papa\n")
            f.write(f"{x}*31 /\n")  # 用f-string更简洁
            f.write("Mama\n")
            f.write(f"{y}*31 /\n")
            # 重复写入当前的第10行T次
            for repeated_line in repeat(line, T):
                f.write(repeated_line)
        else:
            f.write(line)

额外提醒

如果你想操作的是从1开始数的第10行(也就是文件里的第10行),记得把i == 10改成i == 9,因为enumerate默认从0开始计数。

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

火山引擎 最新活动