python处理文本
迷茫
迷茫 2017-04-17 17:49:22
[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

这样的输出格式

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
大家讲道理
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
伊谢尔伦

虽然有点过了,但是算是一个finite state machine。每行文本作文每个状态的输入。然后在3个状态之间这么转。但是如果一共只有这三行的话,有点过。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号