By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,714 Members | 750 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,714 IT Pros & Developers. It's quick & easy.

str.find for multiple strings

P: n/a
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.

Jul 18 '05 #1
Share this Question
Share on Google+
7 Replies


P: n/a
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
Jul 18 '05 #2

P: n/a
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()
Jul 18 '05 #3

P: n/a
Bart Nessux 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

inputFile = file('ath_ips.txt', 'r')
data = inputFile.read()

[snip]

Well, since that shows nothing whatever about the content of the
"data" string (i.e. what is in that ath_ips.txt file), it doesn't
really help to answer the questions I had.

-Peter
Jul 18 '05 #4

P: n/a
On Wed, 11 Feb 2004 14:48:22 -0500 in comp.lang.python, Bart Nessux
<ba*********@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
Jul 18 '05 #5

P: n/a
Dave K wrote:
On Wed, 11 Feb 2004 14:48:22 -0500 in comp.lang.python, Bart Nessux
<ba*********@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.

Jul 18 '05 #6

P: n/a
Hi,

looking at your code is obvious that what you want to do
is to look for servers on the "ath_ips.txt" file and then
comment the line where they appear. I think this search
and replace function can be done with regular expressions
(see the re module). The servers belong to the same
network, and only the two left digits are different.

Regards,
Josef
"Bart Nessux" <ba*********@hotmail.com> wrote in message
news:c0**********@solaris.cc.vt.edu...
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()

Jul 18 '05 #7

P: n/a
Peter Hansen wrote:

Bart Nessux 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?


Ah, trust me to take an industrial-control point of view and not a network
software point of view. You meant "temp" to be a temporary variable, not
a temperature, and the 120.50, 120.51 stuff are partial IP addresses, not
temperatures... how curious of me to confuse them. :-)

-Peter
Jul 18 '05 #8

This discussion thread is closed

Replies have been disabled for this discussion.