是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。 任何帮助将不胜感激!
答案 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
行。