首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:从文件中读取特定行,替换这些行中的特定字符并保存文件

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

Stack Overflow用户
提问于 2018-08-05 04:14:08
回答 2查看 47关注 0票数 1

是python的新手,找不到这个问题的答案。我有一个类似下面的文件:

@BNNDSIJHF

ABCDABCDAB

&

*&ABDA&&#

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

@BNNDSIJHF

AXCDAXCDAX

&

*&ABDA&&#

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

代码语言:javascript
复制
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。如果有任何帮助,我们将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-05 04:26:12

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

票数 1
EN

Stack Overflow用户

发布于 2018-08-05 04:25:39

IIUC,如果您有一个不带空格的行列表

代码语言:javascript
复制
[x for x in f.readlines() if x.strip()]

比如

代码语言:javascript
复制
['@BNNDSIJHF',
 'ABCDABCDAB',
 '&',
 '*&ABDA&&#',
 '@BNNDSIJHF',
 'ABCDABCDAB',
 '&',
 '*&ABDA&&#']

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

代码语言:javascript
复制
for i in range(1, len(ll),  4):
    ll[i] = ll[i].replace('B', 'X')

然后只需使用'\n'.join将其保存回一个文件

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51689247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档