py提取文本内容的问题

blackhat591 2013-07-30 02:44:57
test.txt内容如下:
uid=freeway,ou=People,dc=com
bsn-number=60257685
contentfilterconfigurable=N
brcfilequotatotkb=0
s-webconf=N
fsa-admin-status=N
rm-plan=S
s-contentfilter=N
s-priorityrouting=N
s-br=N
s-hsdpa=N
priorityroutingconfigurable=N
gidNumber=6009
gecos=FREEWAY SHIPPING LIMITED
sn=FREEWAY SHIPPING LIMITED
givenName=FREEWAY SHIPPING LIMITED
cn=FREEWAY SHIPPING LIMITED
netpasshs=e40797da998d1723
userPassword={crypt}9K35ik9Jdj2555
status=A
suspend-reason=T
suspendsince=20091229024501Z
lastpasswdmodifytimestamp=20090502072406Z
lastpasswdmodifymechanism=C
membershipid=1603029
uid=freeway
objectClass=top
objectClass=person
objectClass=organizationalPerson
objectClass=inetOrgPerson
objectClass=ShadowAccount
uidNumber=124850
s-bu=B
s-emailallm=N

uid=freeway2,ou=People,dc=com
bsn-number=60257685
fsanumber=13603824
contentfilterconfigurable=N
brcfilequotatotkb=0
s-webconf=N
fsa-admin-status=N
rm-plan=S
s-contentfilter=N
s-priorityrouting=N
s-br=N
s-hsdpa=N
priorityroutingconfigurable=N
gidNumber=6009
gecos=FREEWAY SHIPPING LIMITED
sn=FREEWAY SHIPPING LIMITED
givenName=FREEWAY SHIPPING LIMITED
cn=FREEWAY SHIPPING LIMITED
netpasshs=e40797da998d1723
userPassword={crypt}9Klw666w5ik9Jdj2
activesince=20100226110216Z
status=A
suspend-reason=T
suspendsince=20091229024501Z
lastpasswdmodifytimestamp=20090502072406Z
lastpasswdmodifymechanism=Cs
uid=freeway2
objectClass=top
objectClass=person
objectClass=organizationalPerson
objectClass=inetOrgPerson
objectClass=pccwinternetuser
s-bu=B
s-emailallm=N

//这样的段很多,空行为不同的段
提取uid和userPassword的内容,输出到txt,格式 uid:userpassword
如 freeway:9K35ik9Jdj2555

这里要注意每个uid对应一个password,空行的没一段中有2个重复的uid,判断一下。
...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoeBlackzqq 2013-07-31
  • 打赏
  • 举报
回复
引用 3 楼 blackhat591 的回复:
不错啊! 这样会不会更简单:

import re
for line in open('D:/t00ls/PyScripter/1.txt'):
    match_uid=re.search(r'(?<=^uid=)\w+(?=,)',line)
    if match_uid:
        uid=match_uid.group(0)
    match_password=re.search(r'(?<=^userPassword={crypt}).*',line)
    if match_password:
        cmd='%s:%s\n'%(uid,match_password.group(0))
        #f=open('D:/t00ls/PyScripter/f.txt','a')
        #f.write(cmd)
        #f.close()
        print cmd
[quote=引用 1 楼 JoeBlackzqq 的回复:]

# coding=UTF8

import re

def readFile(fname, result):
	f = open(fname, "r")
	if not f:
		return False
	lines = f.readlines()
	f.close()
	
	i = 0
	cnt = len(lines)
	pat = ['uid=(\w+),', 'userPassword=\{crypt\}(\w+)']
	while  i < cnt:
		line = lines[i].strip(" \t\n")
		i += 1
		uid = None
		m = re.findall(pat[0], line)
		if len(m) > 0:
			uid = m[0]
		while uid:
			line = lines[i].strip(" \t\n")
			i += 1
			m = re.findall(pat[1], line)
			if len(m) > 0:
				pwd = m[0]
				result.append((uid, pwd))
				uid = None
				break
	return True

def printArray(arr, fout):
	f = open(fout, "w")
	if not f:
		return False

	for item in arr:
		#print "%s:%s" %(item[0], item[1])
		f.write("%s:%s\n" %(item[0], item[1]))
	f.close()
	return True
	
if __name__ == '__main__':
	fname = "test.txt"
	fout = "result.log"
	result = []
	if readFile(fname, result):
		printArray(result, fout)

[/quote] 只要正确就行,你的代码挺短的,不错!
blackhat591 2013-07-31
  • 打赏
  • 举报
回复
不错啊! 这样会不会更简单:

import re
for line in open('D:/t00ls/PyScripter/1.txt'):
    match_uid=re.search(r'(?<=^uid=)\w+(?=,)',line)
    if match_uid:
        uid=match_uid.group(0)
    match_password=re.search(r'(?<=^userPassword={crypt}).*',line)
    if match_password:
        cmd='%s:%s\n'%(uid,match_password.group(0))
        #f=open('D:/t00ls/PyScripter/f.txt','a')
        #f.write(cmd)
        #f.close()
        print cmd
引用 1 楼 JoeBlackzqq 的回复:

# coding=UTF8

import re

def readFile(fname, result):
	f = open(fname, "r")
	if not f:
		return False
	lines = f.readlines()
	f.close()
	
	i = 0
	cnt = len(lines)
	pat = ['uid=(\w+),', 'userPassword=\{crypt\}(\w+)']
	while  i < cnt:
		line = lines[i].strip(" \t\n")
		i += 1
		uid = None
		m = re.findall(pat[0], line)
		if len(m) > 0:
			uid = m[0]
		while uid:
			line = lines[i].strip(" \t\n")
			i += 1
			m = re.findall(pat[1], line)
			if len(m) > 0:
				pwd = m[0]
				result.append((uid, pwd))
				uid = None
				break
	return True

def printArray(arr, fout):
	f = open(fout, "w")
	if not f:
		return False

	for item in arr:
		#print "%s:%s" %(item[0], item[1])
		f.write("%s:%s\n" %(item[0], item[1]))
	f.close()
	return True
	
if __name__ == '__main__':
	fname = "test.txt"
	fout = "result.log"
	result = []
	if readFile(fname, result):
		printArray(result, fout)

panghuhu250 2013-07-30
  • 打赏
  • 举报
回复
你的代码?问题?
JoeBlackzqq 2013-07-30
  • 打赏
  • 举报
回复

# coding=UTF8

import re

def readFile(fname, result):
	f = open(fname, "r")
	if not f:
		return False
	lines = f.readlines()
	f.close()
	
	i = 0
	cnt = len(lines)
	pat = ['uid=(\w+),', 'userPassword=\{crypt\}(\w+)']
	while  i < cnt:
		line = lines[i].strip(" \t\n")
		i += 1
		uid = None
		m = re.findall(pat[0], line)
		if len(m) > 0:
			uid = m[0]
		while uid:
			line = lines[i].strip(" \t\n")
			i += 1
			m = re.findall(pat[1], line)
			if len(m) > 0:
				pwd = m[0]
				result.append((uid, pwd))
				uid = None
				break
	return True

def printArray(arr, fout):
	f = open(fout, "w")
	if not f:
		return False

	for item in arr:
		#print "%s:%s" %(item[0], item[1])
		f.write("%s:%s\n" %(item[0], item[1]))
	f.close()
	return True
	
if __name__ == '__main__':
	fname = "test.txt"
	fout = "result.log"
	result = []
	if readFile(fname, result):
		printArray(result, fout)

684

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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