String comparison problem
wes weston
wweston at att.net
Wed Apr 7 11:42:30 EDT 2004
Senthoorkumaran Punniamoorthy wrote:
> I am printing these information.
>
> print string.lower(info_res[2])
> print string.lower(md5sum(f_md5))
> print len(string.lower(info_res[2]))
> print len(string.lower(md5sum(f_md5)))
> print str(string.lower(md5sum(f_md5)) == string.lower(info_res[2]))
>
> and the output are
>
> 01b7ebfc27437a90cc421c50df8f9ac5
> 01b7ebfc27437a90cc421c50df8f9ac5
> 32
> 32
> False
>
> I was wondering why the last print statement is returning false when two
> strings are identical?
>
> Senthoor
>
> _________________________________________________________________
> Tired of spam? Get advanced junk mail protection with MSN 8.
> http://join.msn.com/?page=features/junkmail
> import urllib2
> import sre
> import string
> import sys
> import md5
> import socket
> import logging
> import getopt
> import os
> from property import property
>
> md5_bufsize=8096
> bufsize=8096
> '''
> Change History
> --------------
> 1.01g:
> i. file close from file_writer() removed so that caller can close the file
> ii. exception handling introduced for mail sending to handle missing
> SMTP config
> iii.file_Dled() method is replaced
> iv. The program doesn't exit if it can't find the logfile anymore. It
> just downloads again.
> v. small bug fixes
> vi. grab_info was made little less complicated by removing the
> compilation of regex
>
> 1.01h:
> i. If the MD5 check sum doesn't match, trying n number of times
> '''
> version="1.01h"
>
> # MD5 checksum program taken from python_home/tools/scripts/md5sum.py
> # That was a stand alone script with many options
> # Just took the function which did the checksumming, and reduced it.
>
> def md5sum(fp):
> m = md5.new()
> try:
> while 1:
> data = fp.read(md5_bufsize)
> if not data:
> break
> m.update(data)
> except IOError, msg:
> log.error('I/O error: '+ str(msg))
> log.error('System Abort')
> sys.exit(1)
>
> return m.hexdigest()
>
> '''Reads the file from fp_in and writes it to fp_out. fp_in normally is
> the file being
> downloaded and fp_out is the file being written to the local disk'''
> def file_writer(fp_in, fp_out):
> try:
> log.info('File Downloading in Progress.',)
> while 1:
> data = fp_in.read(bufsize)
> if not data:
> break
> fp_out.write(data)
> fp_out.flush()
> #fp_out.write('senthoor')
> #fp_out.flush()
> except IOError, msg:
> log.error('Error resolving address: '+ str(msg))
> log.error('System Abort')
> sys.exit(1)
> except socket.error, msg:
> log.error('Soket error: '+ str(msg))
> log.error('System Abort')
> sys.exit(1)
>
> def send_mail(mailserver,from_addr, to_addr, file_name):
> msg = 'Greetings all, \n The lastest virus definition file' +
> file_name + ' has been down loaded'
> server = smtplib.SMTP(mailserver)
> server.set_debuglevel(1)
> server.sendmail(from_addr, to_addr, msg)
> server.quit()
>
> '''Takes a list of regular expressions and a Source(String) and searchs
> source for
> match and returns a list with all the matches'''
> def grab_info(listRegEx,source):
> #this needs improvement. The compilation is unnecessary and will be
> removed
> return map(lambda x:x.group(1),map(lambda x: sre.search(x,
> source),listRegEx))
>
> def show_usage():
> print 'under construnction'
>
> '''Processes the command line argument'''
> def process_args(a):
> try:
> args = getopt.getopt(a[1:],'dv')
> for x in args[0]:
> if x[0] == '-d':
> log.setLevel(logging.DEBUG)
> if x[0] == '-v':
> print 'theRetriever '+ version +', MotleyPythons'
> sys.exit(0)
> except getopt.GetoptError,msg:
> show_usage()
> sys.exit(1)
>
> '''Checks the log file whether the file name exsits. If the file name
> exsits then no need to download the file since its been already
> downloaded'''
> def file_Dled(file,fileName):
> if os.path.exists(file):
> return sre.search(fileName,open(file).read())
>
> '''When the file is downloaded and written to the local disk the
> log file updated with the file name'''
> def file_DlOK(file,fileName):
> exc = 0
> try:
> fp = open(file,'a')
> fp.write(fileName + '\n')
> fp.close
> except IOError,msg:
> log.error('I/O error: '+ str(msg))
> log.error('System Abort')
> sys.exit(1)
>
> #Logging Initialised
> logging.basicConfig()
> log = logging.getLogger('Retriever')
> log.setLevel(logging.INFO)
> process_args(sys.argv)
>
>
> # Get information from config file
> config = property('config.cfg')
> log.debug('Config Loaded')
> dllog=config.get_safe('LOCATION','')+'dledfile.lst'
> no_of_trys = 0
>
> #this is being introduced so that file be downloaded if the it was
> #not download failed and we are going to have a time testing this:-)
> md5_error=1 #at the begining no file so md5_error is true:-)
> log.debug('Retries :' + str(config.get_safe('RETRIES',0)))
> while md5_error and (no_of_trys<=int(config.get_safe('RETRIES',0))):
> no_of_trys +=1
>
> #until its proven md5 mismatch exit we assume it doesn't
> #this helps us only to repeat downloaing in the case of mismatch
> #and if the downloading stops for other reasons
> md5_error = 0
> try:
> f1 = urllib2.urlopen(config.get('URL'))
> log.debug(config.get('URL') + 'has been read')
> except urllib2.URLError, msg:
> log.error('Error Reading ' + config.get('URL') + '\n' + str(msg))
> log.error('System Abort')
> sys.exit(1)
> htmlsource = f1.read()
> f1.close()
>
> info_regex =
> ['href="(.*2\d{7}-\d{3}-i32.exe)"','href=".*(2\d{7}-\d{3}-i32.exe)"','MD5</a>:\s(.*)\s<a']
>
> info_res = grab_info(info_regex,htmlsource)
> log.debug('retrieved info \n' + str(info_res))
> # Exit if file already loaded
> if file_Dled(dllog,info_res[1]):
> log.info('File already downloaded. Process Stopping',)
> sys.exit(0)
>
> #reading and writing to a local file
> virusdeflocal=open(config.get_safe('LOCATION','')+info_res[1],'wb')
> authinfo = urllib2.Request(config.get('URL'))
> virusdefserver =
> urllib2.urlopen('http://'+authinfo.get_host()+info_res[0])
> file_writer(virusdefserver,virusdeflocal)
> virusdeflocal.close()
> virusdefserver.close()
>
> f_md5=open(config.get_safe('LOCATION','')+info_res[1],'rb')
> if string.lower(md5sum(f_md5)) == string.lower(info_res[2]):
> log.debug("Yipee !!!, it works!!")
> # Have to copy the file to the common share
> # Must have location in config file
>
> # Put entry in logfile
> file_DlOK(dllog,info_res[1])
> try:
>
> send_mail(config.get('SMTP'),config.get('FROM_ADDR'),config.get('TO_ADDR'),filename)
>
> except KeyError, msg:
> log.error('Mail not sent: ' + str(msg))
>
> else:
> log.debug("Bummer")
> md5_error=1
Senthoorkumaran Punniamoorthy,
>>> s1='01b7ebfc27437a90cc421c50df8f9ac5'
>>> s2=s1
>>> import string
>>> print str(string.lower(s1))==string.lower(s2)
True
????????????????????????/
wes
More information about the Python-list
mailing list