我有一个文本文件,其中有超过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()
答案 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