Python:从文件中读取特定行,并替换这些行上的特定字符并保存文件

时间:2018-08-04 20:14:08

标签: python loops iteration

是python的新手,无法找到此问题的答案。 我有一个与此类似的文件:

@BNNDSIJHF
ABCDABCDAB

*&ABDA &&#

一个对象有四行数据。文件中有1000个对象,因此文件中有4 *个对象。 我需要将所有B替换为X,但仅在每个对象的第2行。 例如。

@BNNDSIJHF
AXCDAXCDAX

*&ABDA &&#

即使对象的最后一行包含B,也不会替换它们。 这是我尝试过的:

import sys
import os
def open_and_replace(filename):
with open(filename) as read_file:
    temp = open("/tmp/temp.txt","w")
    for index,line in enumerate(read_file,1):
        if index == 2:
            temp.write(line.replace('B', 'X'))
            index=index+4
        else:
            temp.write(line.strip() + "\n")
    temp.close()
os.rename("/tmp/temp.txt",filename)
for file_name in sys.argv[1:]:
open_and_replace(file_name)

这将替换文件中第2行之后的所有B。 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

IIUC,如果您有没有空格的行列表

[x for x in f.readlines() if x.strip()]

例如

['@BNNDSIJHF',
 'ABCDABCDAB',
 '&',
 '*&ABDA&&#',
 '@BNNDSIJHF',
 'ABCDABCDAB',
 '&',
 '*&ABDA&&#']

您可以只使用从第二行开始的for循环,步长为4,这是每个对象的固定长度。

for i in range(1, len(ll),  4):
    ll[i] = ll[i].replace('B', 'X')

然后仅'\n'.join将其保存回文件

答案 1 :(得分:1)

您应将if index == 2语句更改为if index % 4 == 2,并删除index=index+4行。