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