Python从Fi中提取文本

2024-10-01 09:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码(到目前为止):

ins = open( "log", "r" )
array = []
for line in ins:
    array.append( line )

for line in array:
    if "xyz" in line:
        print "xyz found!"
    else:
        print "xyz not found!"

日志文件示例:

^{pr2}$

我当前使用的Python脚本找到xyz并打印它找到的内容。但我想做的不仅仅是找到xyz。我想在xyz之前和之后找到这个词。一旦我这样做了,我希望能够存储(暂时,您的回答中不需要数据库)Norman出现在“xyz”之前的次数以及Norman在“xyz”之后的次数(这也适用于所有其他名称和动物)。在

这纯粹是一个学习练习,所以如果你能包括你提出答案的“过程”,我们将不胜感激。我想知道如何像程序员一样思考,如果你愿意的话。这些代码的大部分只是我在google上找到的东西,然后混搭在一起,直到我找到了有用的东西。如果有更好的方式来写我目前所拥有的,我也会很感激!在

谢谢你的帮助!在


Tags: 代码inlogforiflineopen次数
2条回答

如果您所说的“单词”只是指“空格分隔标记”,则可以使用

x, key, y = line.split()

然后检查key == "xyz",如果是,请采取行动。在

“采取行动”部分显然意味着“数东西”,这就是collections.Counter的意义所在。要计算xyz前后的值,请使用两个计数器:

^{pr2}$

请注意,您当前的脚本将文件读入RAM会浪费大量的时间和内存,所以我也修复了这个问题。要遍历文件的行,不需要中间变量array。在

'abc'.split('b')将返回['a','c'],因此我们可以这样更改您的代码:

ins = open( "log", "r" )
array = []
prefixes = []
suffixes = []
for line in ins:
    array.append( line )

for line in array:
    if "xyz" in line:
            prefixes.append(line.split("xyz")[0])
            suffixes.append(line.split("xyz")[1])
    else:
        print "xyz not found!"

或者,如果我们只想知道某物在xyz之后或之前出现的所有时间,我们可以使用Counter

^{pr2}$

相关问题 更多 >