Функция возвращает список позиций вхождения строки string в текст text.
Необязательные аргументы:
register=1 # учитывать регист букв
edge=1 # искать слово только "целиком" (если подстрока-часть слова в тексте, она не принимается)
def search(text, string, register=None, edge=None):
if not register:text,string=text.lower(),string.lower()
if edge:
def ist(t):
return t.isalpha()+t.isdigit()*2+t.isspace()*4
ed1,ed2,len_string,len_text=ist(string[0]),ist(string[-1]),string.__len__(),text.__len__()
index,find=[],-1
while 1:
find=text.find(string,find+1)
if find<0:break
if edge and ((find>0 and ist(text[find-1])==ed1) or (find+len_string<len_text and ist(text[find+len_string])==ed2)):find+=1;continue
index.append(find)
return index
search(u'Hello word, aga', u'Aga',0,1) # искать без учета регистра, слово целиком
-------------
добавлено в 01.00: Как скачать маленький файл на низком уровне, чтоб не сожрало из за него всю оперативу без urllib и httplib (если хотите, замените e32socket на socket или iapconnect):
#Retrieve.py,by Krust (24,12,2009)
def retrieve(url, path):
host,url=url.split('/',1)
#print host,url
import e32socket,e32
client=e32socket.socket(e32socket.AF_INET, e32socket.SOCK_STREAM,0,None)
client.connect((e32socket.gethostbyname(host),80))
print 'ok connect'
client.send('GET /%s HTTP/1.0\r\nHost: %s\r\nUser-agent: Python\r\n\r\n'%(url, host))
string=client.recv(1024).split('\r\n')
for t in xrange(string.__len__()):
if not string[t] or string[t].isspace():break
print '\r\n'.join(string[:t+1]) # Header
string=['\r\n'.join(string[t+1:])]
while 1:
e32.ao_yield()
t=client.recv(1024)
if not t:break
string.append(t)
import e32posix as ex
f=ex.open(path,ex.O_RDWR|ex.O_TRUNC|ex.O_CREAT)
ex.write(f,''.join(string))
ex.close(f)
print 'Done'
if __name__=='__main__':
retrieve('python.org/images/python-logo.gif', 'c:\\logo_from_python_org.jpg')
это же в прикрепленном файле.
Прикрепленный файл #1:
retrieve_by_krust_in_08012010230648_f.zip ( меньше 1кб)