在python中搜索并替换字符串行

时间:2014-06-10 14:11:09

标签: python regex file-io

我有一个奇怪的搜索案例,并使用python替换文本文件中的字符串。

输入数据:我有一个类似如下所示的文本文件。

QA1,QBFLUX,1.0
many lines
QA2,QBFLUX,1.0
many lines
QA3,QBFLUX,1.0
many lines
QA4,QBFLUX,1.0
many lines
QA5,QBFLUX,1.0
many lines
QA6,QBFLUX,1.0
many lines.

我有两个问题需要解决

  1. 使用1.0搜索并替换0.0。所需的输出是:

    QA1,QBFLUX,0.0
    many lines
    QA2,QBFLUX,0.0
    many lines
    QA3,QBFLUX,0.0
    
  2. 在上面的行中,我想将值增加一些值,如0.20.4。所需的输出是:

    QA1,QBFLUX,0.0
    many lines
    QA2,QBFLUX,0.2
    many lines
    QA3,QBFLUX,0.4.
    
  3. 上面的“many lines”表示该部分中会有很多行。

    简单来说,我的问题可以总结如下

    1. 首先搜索包含QA1QA2等的所有行,并将最后一个条目中的所有值替换为0.0

    2. 其次,在0.20.4等行的最后几列中按照QA1QA2的给定增量递增值。

    3. 注意:

      • 我已经尝试过文件打开和替换选项,但这并没有解决我的问题

      • 由于缺乏正则表达式的知识,我没有尝试过正则表达式。

      • 文本文件可能包含约5000-6000行,行QA1QA2等行约100-150行。

2 个答案:

答案 0 :(得分:2)

Python提供了一个模块fileinput,它对此任务特别方便:

import fileinput
import sys
count = 0
for line in fileinput.input([filename], inplace=True, backup='.bak'):
    if line.startswith('QA'):
        pre, post = line.rsplit(',', 1)
        sys.stdout.write('{},{:0.1f}\n'.format(pre, count))
        count += 0.2
    else:
        sys.stdout.write(line)

我认为您不需要将所有1.0替换为0.0,然后将0.0 s替换为递增0.2的数字。相反,只需找到以QA开头的行,并将最后一个数字替换为所需的数字。

答案 1 :(得分:1)

你可以通过以下步骤实现这一目标:

  1. 打开一个新文件来写入数据
  2. 在行
  3. 中搜索“QBFLUX”字样
  4. 现在用0.0(val)

  5. 替换1.0
  6. 将val增加0.2

    out= open('output.txt','a') 
    with open('data.txt','r') as file:
        val=0.0
        for line in file:
            if 'QBFLUX' in line:
                tmp=line.split(',')
                tmp[-1]=str(val)+'\n'
                out.write(','.join(tmp))
                val+=0.2
    
            else:
                out.write(line)