这个文本文件核心有几种情况:
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
迷茫2017-04-17 17:44:39
첫 번째 상황에서는 다음 방법을 참고할 수 있습니다.
Python3 이상을 사용하는 경우:
으아악 코드를 조금 설명하겠습니다. open
을 사용하여 생성된 파일 객체를 바로 이터레이터로 사용할 수 있습니다. for line in reader:
을 사용하는 것이 readline을 사용하는 것보다 더 간결합니다.
또한 number, ID, *items = line.split()
은 line.split()
으로 잘라낸 문자열을 번호(첫 번째 잘라낸 문자열)와 ID(두 번째 문자열)에 할당하고 마지막으로 다른 잘라낸 문자열을 할당하는 데 사용됩니다. 문자열을 목록에 추가하고 items
(별표로 표시된 변수)에 할당합니다.
그러나 이 사용법은 모든 Python 버전에 적용되지 않을 수 있으므로 Python2.7을 사용하는 경우 다음 방법을 채택할 수 있습니다.
으아악이 접근 방식의 아이디어는 매우 간단합니다. flag
플래그를 설정하여 행의 ID를 인쇄할지 아니면 수집할지 결정합니다. 둘째, 각 줄은 number
및 flag_number
를 사용하여 flag
를 켜거나 끌지 여부를 결정해야 합니다.
다음은 Python3용 코드입니다. 필요한 경우 print
를 Python2의 사용법으로 변경할 수 있습니다. 차이점은 여기뿐입니다. (급하게 작성해서 죄송합니다, 코드가 충분히 다듬어지지 않았을 수도 있습니다)
모든 시나리오를 고려하여 먼저 ID 수집을 위한 IdCollect
클래스와 작업 객체화를 위한 Action
두 클래스를 정의합니다.
*IdCollect
수업
*Action
수업:
마지막으로 사용된 방법은 다음과 같습니다.
으아악다음은 제가 직접 작성한 테스트 파일입니다.
으아악출력은 다음과 같습니다.
으아악