[Tutor] manipulating a string in python
Stuart Sears
stuart at sjsears.com
Tue Nov 27 18:14:38 CET 2012
On 27/11/12 16:49, Dave Wilder wrote:
> Hello,
>
> I believe there is a simple answer to this, but I am confused on what
> direction I should go that would perform what I wish to do most
> efficiently.
>
> ** My Environment ***
>
> [root at f5ite ~/tests]$ python
>
> Python 2.7 (r27:82500, Jul 6 2010, 02:54:50)
>
> [GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
>
> Type "help", "copyright", "credits" or "license" for more information.
>
> [root at f5ite ~/tests]$ uname –a
>
> Linux VM-QA-ITE-03 2.6.32-220.17.1.el6.i686 #1 SMP Tue May 15 22:09:39
> BST 2012 i686 i686 i386 GNU/Linux
>
> [root at f5ite ~/tests]$ more /etc/redhat-release
>
> CentOS release 5.8 (Final)
>
> [root at f5ite ~/tests]$
>
> I need to strip down a string to make a list of “auto” and anything
> starting w/ “10” and nothing else.
well, if you know the pattern, you could use regex for that.
Or, if it's really simple, a single split and lots of .startswith or
fnmatch calls could also work.
>
> Below is the string I am currently working with.
>
>>> results
>
> 'tmsh list net interface 1.1 media-capa \rbilities\nnet interface 1.1
> {\n media-capabilities {\n none\n auto\n 10T-FD\n
>
> 10T-HD\n 100TX-FD\n 100TX-HD\n 1000T-FD\n
> 1000T-HD\n }\n}\n'
>
>>>
>
> I want to chop it up, so I have a list of all media speeds (auto or
> “10X” that I can then loop through, so would like to end up with
> something like below:
>>> results
>
> ‘none’, ‘auto’, ‘10T-FD’…’1000T-HD’
>
> I could do this using a series of “split” commands. However, is there a
> better way? For example, can I just eliminate “media-capabilities”, “{“
> and “}” right off the bat
>
> and then do a split on “\n”? Should I use “re” matching for this?
I'd say so.
Assuming that is essentially 'auto' and 'starts with 10..T'
import re
media_re = re.compile(r'(auto|10+T-[HF]D)')
instr = """tmsh list net interface 1.1 media-capa \rbilities\nnet
interface 1.1
{\n media-capabilities {\n none\n auto\n 10T-FD\n
10T-HD\n 100TX-FD\n 100TX-HD\n 1000T-FD\n
1000T-HD\n }\n}\n"""
print [ x.strip() for x in instr.split() if media_re.match(x) ]
gives:
['auto', '10T-FD', '10T-HD', '1000T-FD', '1000T-HD']
if you want to include 'none' as well, you'd add it to the regex
> I could also just a single split(‘\n’) and then inside the loop ignore
> everything that is not “auto” or starts with “10”, but that seems
> inefficient.
>
> Any advice on the best way to do this?
I'd use regex for it, but there are numerous other ways to achieve this.
--
Stuart Sears RHCA etc.
"It's today!" said Piglet.
"My favourite day," said Pooh.
More information about the Tutor
mailing list