文本查找输出求助!

pythonpowered 2017-05-20 03:10:24
有这样的文本文件:

Begin
start
s1 xxxxxxxxxxxxx
s2 xxxxxxxxxxxxx
s3 xxxxxxxxxxxxx
s4 xxxxxxxxxxxxx
end

start
s1 xxxxxxxxxxxxx
s2 xxxxxxxxxxxxx
s3 xxxxxxxxxxxxx
s4 xxxxxxxxxxxxx
end

start
s1 xxxxxxxxxxxxx
s2 xxxxxxxxxxxxx
s3 xxxxxxxxxxxxx
s4 xxxxxxxxxxxxx
end
.
.
.
Finish

这样的文本文件,内容几十万行,但是是由大量类似的区块构成,比如“start”开头,“end”结尾;每行的开头为s1 s2 s3等。
想实现这样的检索: s1开头到相邻的s2之间(可能超过1行内容)或者s2开头到s3之间,或者s3开头到s4之间,s4开头到end之间,如果有要检索的文本,则将 这一个区块(start开头,end结尾 这部分内容)内容,写到一个新的文件中,查找整个文件。

求高手指导,谢谢。
...全文
170 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pythonpowered 2017-05-30
  • 打赏
  • 举报
回复
谢谢两位的指导!
屎克螂 2017-05-24
  • 打赏
  • 举报
回复
楼上的方法 一次性全读文件 不知道会不会把内存卡爆,像你这种很有规律性的文件 可以一行一行读来处理

data = []
t_data = []
for d in open('aa.txt', 'rb'):
    if d.startswith('start'):
        t_data = []
    elif d.startswith('end'):
        data.append('\n'.join(t_data))
    else:
        t_data.append(d)
print json.dumps(data, indent=4)
sanGuo_uu 2017-05-22
  • 打赏
  • 举报
回复
思路其实很简单的,不过我正则写了半天
# -*- coding:utf-8 -*-

import sys
import time
import re

if len(sys.argv)>1:
	para=sys.argv[1]
	txt=''
	with open('D:/testP/zz.txt','r+') as f:
		txt=f.read()

	pattern=re.compile(r'start(.*?)end',re.S)
	contents=pattern.findall(txt)

	results=''
	if para:
		for item in contents:
			#print item
			patt=re.compile(r'%s([\s|\S]*?)((s\d*)|$)'%para,re.S)
			res=patt.findall(item)
			#print res
			if len(res)>0:
				results+=str(res[0][0])
				#print res[0][0]
	with open('D:/testP/'+para+str(time.time())[:3]+'.txt','w+') as f2:
		f2.write(results)

	print 'over'
else:
	print u'没有参数\n示例:python tt.py s1'

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧