这个文本文件核心有几种情况:
1.序号 ID 操作者 操作行为 操作行为 操作对象
6883 556773833 RemyMCMXI
6880 556772838 Mindmatrix restored undeleted RemyMCMXI
6882 556771715 RemyMCMXI
6881 556770863 RemyMCMXI
6880 556673938 Liua97
6879 554350969 Epicgenius
6880 554332653 Alex
找到restored所在行,得到该行序号6880,然后往下读,找到第一个与其序号相同的行(liua97那行),然后记录下这两行之间所有的id值(包括restored那行),这个例子就是记录下556772838 556771715 556770863这三个id。
2.序号 ID 操作者 操作行为 操作行为 操作对象
208 1675137 Netizen restored undeleted Netizen
207 1648639 Netizen
206 1648621 142.58.181.84
205 1646546 Patrick
204 1638165 Patrick
找到restored所在行,然而往下找不到这个restored行的序号208,这个时候就是读取undelted对象,然后往下找相邻的这个对象的操作者(一般情况下这个restored往下的相邻行的操作者这个对象)。比如这个例子就是记录1675137 1648639这两个id。
3.序号 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
这个同样也是,restored所在行的序号153往下找找不到,然后undeleted的对象在下面连续出现,这个时候就是记录连续出现的所有行的id,就是1254853 819 815 812 799 796 783 771这几个id。
然后现在我对这样的处理没有什么思路,,文本文件的一行就是一个字符串 split的话那些没有包含restored的行就会出现数组越界。。。我就不知道该怎么处理了,求各位大神给个思路orz
对于第一种情形,可以参考下列做法:
如果使用的是 Python3 以上的版本:
稍微解释一下代码,使用
open
产生的 file object 可以直接当作一个 iterator, 利用for line in reader:
比起 readlines 会更简明。open
產生的 file object 可以直接當作一個 iterator, 利用for line in reader:
比起 readlines 會更簡明。另外
number, ID, *items = line.split()
是 unpacking 的用法, 他會將line.split()
切割出來的字串分別配給 number(配到第一個切割字串) ID(配到第二個), 最後會把其他的切割字串集成一個 list 配給items
(打星號的那個變數)。不過這個用法不一定適用所有的 Python 版本,所以如果你用的是 Python2.7,可以採行下列做法:
至於這種做法的思路很單純,設置一個
flag
標誌用來判斷該行的 ID 是否要被印出或收集。其次每一行都要用number
和flag_number
來判斷是否要開關flag
。下面是Python3的代碼,如果有需要,可以自行將
print
改為 Python2 的用法,差別應該只有在這。(抱歉因為寫得很快,代碼可能不夠精緻)考慮到所有情形,首先定義了兩個類:
IdCollect
用來收集 ID 以及Action
用來對象化一個操作:*
IdCollect
類*
另外Action
number, ID, *items = line.split()
是unpacking 的用法, 他会将line.split()
切割出来的字串分别配给number(配到第一个切割字串) ID(配到第二个), 最后会把其他的切割字串集成一个list 配给items
(打星号的那个变数)。至于这种做法的思路很单纯,设置一个
flag
标志用来判断该行的 ID 是否要被印出或收集。其次每一行都要用number
和flag_number
来判断是否要开关flag
。print
改为 Python2 的用法,差别应该只有在这。 (抱歉因为写得很快,代码可能不够精致)🎜 🎜考虑到所有情形,首先定义了两个类:IdCollect
用来收集 ID 以及Action
用来对象化一个操作:🎜 🎜*IdCollect
类🎜 🎜*Action
类:🎜 🎜最后是使用的方法:🎜 🎜 🎜以下是我乱写的一个测试文件:🎜 rrreee 🎜输出长这样:🎜 rrreee