python处理文本

查看:122
本文介绍了python处理文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

有如下的文本内容:

208 **1675137** Netizen restored undeleted Netizen
207 1648639 Netizen
206 **1648621** 142.58.181.84
205 1646546 Patrick
204 1638165 Patrick

我现在需要做的事情是找到含有 restored 的这一行,记录下这个第二列的 ID 内容,然后根据 restored 这一行的 undeleted 的对象,也就是 undeleted 后面的那个列的内容,继续往下找到该对象所在行,然后记录下这个对象所在行的下一行的 ID,然后将其跟 restored 所在行的 ID 对应输出。
照这个文本的例子来说,就是先找到 208 所在的含 restored 的这一行 ID 1675137. 然后在看这行 undeleted 的对象是 Netizen,就继续往下读,找到第三列为 Netizen 的这行,就是 207 这一行。然后记录下 207 的下一行 206 的ID 1648621。
最后输出这两个对应 ID。也就是输出这样的形式: 1675137 1648621 这样的就行了,就是加粗的两个ID。

请问各位大神有什么思路么。


补充下,还有可能出现这样的情况:

153 **1254853** Eloquence restored undeleted Eloquence
152 1254819 Eloquence
151 1254815 Eloquence
150 1254812 Eloquence
149 1254799 Eloquence
148 1254796 Eloquence
147 1254782 Eloquence
146 1254771 Eloquence
145 **1254740** 217.185.183.250

这种 undeleted 对象有很多连续行的,这个就是取的最后一个对象的下一行。。像加粗的 ID 那样
另外我希望能打印出这样的格式:

111 222
112 333
113 444

这种对应的格式。就拿上面两个例子,输出的结果应该是:

1675137 1648621
1254853 1254740

这样的输出格式

解决方案

import re


def file_generator(file):
    with open(file) as f:
        for line in f:
            yield re.split(r'\s+', line.strip())

my_file = file_generator('sample.txt')
for items in my_file:
    if 'restored' in items:
        restored_id = items[1]
        obj = items[-1]
        while True:
            if obj not in items:
                items = next(my_file)            
                continue
            while obj in items:
                items = next(my_file)
            print('%s %s' % (restored_id, items[1]))
            break

这篇关于python处理文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆