Python - 在特定单词后查找并乘以整数

时间:2014-02-10 10:27:49

标签: python replace text-files

我有一个文本文件,其中有超过60,000行,我需要查找一个特定的单词,然后将其后面的数字相乘。例如:

The cat jumped over the log
  tree 6
the dog also jumped over the log
tree 43

如果乘以2,最终会结束:

The cat jumped over the log
  tree 12
the dog also jumped over the log
tree 86

我知道这很简单,但我无法绕过它。我需要逐字逐句查找整个文本文件,查找“tree”的实例,在此之后找到整数,进行更改,然后替换该行。

我也知道每次出现的“树”都会有一个整数。

感谢您的帮助。

编辑:

我目前的代码是:

file = open('export_desc.txt', 'r')

a = "ext_mpl "
for line in file:
    n = file.find(a+1)
    n = n*2
    file.write(line.replace(a+1, a+n))

file.close()

2 个答案:

答案 0 :(得分:0)

使用fileinput module就地重写文件。您可以使用print写回同一个文件(但会删除换行符),或者写入sys.stdout(保留换行符):

import fileinput

for line in fileinput.input('filename', inplace=True):
    line = line.rstrip('\n')
    if line.strip().startswith('tree '):
        start, value = line.rsplit(None, 1)
        line = '{} {}'.format(start, (int(value) * 2)

    print line

str.strip()从行的开头和结尾删除空格(制表符,空格,回车符,换行符等),允许在行的开头测试tree时有更大的容差

str.rsplit() method在空白的最后一部分划分该行,假设该数字是该行的最后一个部分。 None参数使.rsplit()在任意宽度的空格上分割,1使其仅拆分一次。这导致两个返回值;直到最后一部分空格的行的开头和数字。

这允许我们重建原始行,主要是使用加倍的值。

答案 1 :(得分:0)

您甚至不必编写python脚本,sed命令可以帮助您:

sed -r '/^tree ([0-9]+)$/{h;s/^.* ([0-9]+)$/echo \1*2|bc/e;H;g;s/[0-9]+\n//}' export_desc.txt

样品:

>sed -r '/^tree ([0-9]+)$/{h;s/^.* ([0-9]+)$/echo \1*2|bc/e;H;g;s/[0-9]+\n//}' 123
The cat jumped over the log
tree 12
the dog also jumped over the log
tree 86
>cat 123
The cat jumped over the log
tree 6
the dog also jumped over the log
tree 43