是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。如果有任何帮助,我们将不胜感激!
发布于 2018-08-05 04:26:12
您应该将if index == 2
语句更改为if index % 4 == 2
,并删除index=index+4
行。
发布于 2018-08-05 04:25:39
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
将其保存回一个文件
https://stackoverflow.com/questions/51689247
复制相似问题