str.find for multiple strings

Bart Nessux bart_nessux at hotmail.com
Thu Feb 12 09:43:30 EST 2004


Dave K wrote:
> On Wed, 11 Feb 2004 14:48:22 -0500 in comp.lang.python, Bart Nessux
> <bart_nessux at hotmail.com> wrote:
> 
> 
>>Peter Hansen wrote:
>>
>>>Bart Nessux wrote:
>>>
>>>
>>>>x = str.find(temp, '120.50')
>>>>
>>>>I am looking for '120.50' '120.51' '122.78' etc. How can I do this with
>>>>just one str.find... I can use re if I must, but I'd like to avoid it if
>>>>possible.
>>>
>>>
>>>In addition to Fecundo's questions, here's another.  What does "temp"
>>>contain?  A single temperature string, or a temperature embedded in
>>>a bunch of other stuff, or a whole series of temperatures, or what?
>>>
>>>-Peter
>>
>>Here's what I'm doing
>>
>>def exclude():
>>   import os
>>   os.chdir('/home/rbt/scripts')
>>   inputFile = file('ath_ips.txt', 'r')
>>   data = inputFile.read()
>>   inputFile.close()
>>   comment = '#'
>>   net0 = '128.173.120.'
>>   net1 = '128.173.122.'
>>   host0 = ['50','51','52','53','54','55']
>>   host1 = ['17','25','49','50','55','58','70']
>>   for h0 in host0:
>>      h0 = net0+h0
>>      rep0 = comment+h0
>>      sea0 = str.find(data, h0)
>>      if sea0 >=0:
>>         data = data.replace(h0, rep0)
>>   for h1 in host1:
>>      h1 = net1+h1
>>      rep1 = comment+h1
>>      sea1 = str.find(data, h1)
>>      if sea1 >=0:
>>         data = data.replace(h1, rep1)
>>   outputFile = file('ath_ips.txt', 'w')
>>   outputFile.write(data)
>>   outputFile.close()
>>
> 
> 
> There's no need to do an explicit find() before replace(). Your 'for'
> loops can be written as
> 
>    for h0 in host0:
>       data = data.replace(net0+h0, comment+net0+h0)
>    for h1 in host1:
>       data = data.replace(net1+h1, comment+net1+h1)
> 
> 
> Or reduce it to one 'for' loop with list_comprehensions
> 
>    for host in [net0+h0 for h0 in host0] + [net1+h1 for h1 in host1]:
>       data = data.replace(host, comment+host)
> 
> Dave

Thanks Dave. That's very helpful.




More information about the Python-list mailing list