Help needed to retrieve text from a text-file using RegEx

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Mon Feb 9 18:12:14 CET 2009


Oltmans a écrit :
> Here is the scenario:
> 
> It's a command line program. I ask user for a input string. Based on
> that input string I retrieve text from a text file. My text file looks
> like following
> 
> Text-file:
> -------------
> AbcManager=C:\source\code\Modules\Code-AbcManager\
> AbcTest=C:\source\code\Modules\Code-AbcTest\
> DecConnector=C:\source\code\Modules\Code-DecConnector\
> GHIManager=C:\source\code\Modules\Code-GHIManager\
> JKLConnector=C:\source\code\Modules\Code-JKLConnector
> 
> -------------
> 
> So now if I run the program and user enters
> 
> DecConnector
> 
> Then I'm supposed to show them this text "C:\source\code\Modules\Code-
> DecConnector" from the text-file. Right now I'm retrieving using the
> following code which seems quite ineffecient and inelegant at the same
> time
> 
>  with open('MyTextFile.txt') 

This will lookup for MyFile.txt in the system's current working 
directory - which is not necessarily in the script's directory.

>  as file:

this shadows the builtin's 'file' symbol.

>                 for line in file:
> 
>                     if mName in line: #mName is the string that
> contains user input

> 
>                         Path =str(line).strip('\n')

'line' is already a string.

>                         tempStr=Path
> 
>                         Path=tempStr.replace(mName+'=',"",1)

You don't need the temporary variable here. Also, you may want to use 
str.split instead:


# NB : renaming for conformity to
# Python's official naming conventions

# 'name' => what the user looks for
# 'path_to_file' => fully qualified path to the 'database' file

target = "%s=" % name # what we are really looking for

with open(path_to_file) as the_file:
     for line in the_file:
         # special bonus : handles empty lines and 'comment' lines
         # feel free to comment out the thre following lines if
         # you're sure you don't need them !-)
         line = line.strip()
	if not line or line.startswith('#') or line.startswith(';'):
             continue

         # faster and simpler than a regexp
         if line.startswith(target):
             # since the '=' is in target, we can safely assume
             # that line.split('=') will return at least a
             # 2-elements list
             path = line.split('=')[1]
             # no need to look further
             break
     else:
         # target not found...
         path = None



> I was wondering if using RegEx will make this look better.

I don't think so. Really.



More information about the Python-list mailing list