Re: truncating strings

2011-08-23 Thread Chris Rebert
On Tue, Aug 23, 2011 at 9:29 AM, Roy Smith r...@panix.com wrote:
 I want to log a string but only the first bunch of it, and add ...
 to the end if it got truncated.  This certainly works:

          log_message = message
          if len(log_message) = 50:
            log_message = log_message[:50] + '...'
          logger.error(FAILED: '%s', '%s', %s, %s % (log_message,
 route, params, e.code))

 but it bugs me that there should be some cleaner way to do this.  I'm
 fantasizing about something along the lines of:

          logger.error(FAILED: '%s{50}', '%s', %s, %s % (message,
 route, params, e.code))

 does anything like this exist?

You can specify a maximum width to truncate the string to, but I don't
see any built-in way to add an elision indication (e.g. ...).

 %.4s % spam and eggs
'spam'
 {:.4s}.format(spam and eggs)
'spam'

You could define something to wrap strings and override __format__()
or similar, but that seems like overkill.

Cheers,
Chris
--
http://rebertia.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: truncating strings

2011-08-23 Thread Seebs
On 2011-08-23, Roy Smith r...@panix.com wrote:
 I want to log a string but only the first bunch of it, and add ...
 to the end if it got truncated.  This certainly works:

   logger.error(FAILED: '%s{50}', '%s', %s, %s % (message,
 route, params, e.code))

 does anything like this exist?

%.50s

-s
-- 
Copyright 2011, all wrongs reversed.  Peter Seebach / usenet-nos...@seebs.net
http://www.seebs.net/log/ -- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) -- get educated!
I am not speaking for my employer, although they do rent some of my opinions.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: truncating strings

2011-08-23 Thread Ethan Furman

Seebs wrote:

On 2011-08-23, Roy Smith r...@panix.com wrote:

I want to log a string but only the first bunch of it, and add ...
to the end if it got truncated.  This certainly works:



  logger.error(FAILED: '%s{50}', '%s', %s, %s % (message,
route, params, e.code))



does anything like this exist?


%.50s


That's not working in 2.7 or 3.2.

~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list


Re: truncating strings

2011-08-23 Thread Seebs
On 2011-08-23, Ethan Furman et...@stoneleaf.us wrote:
 Seebs wrote:
 On 2011-08-23, Roy Smith r...@panix.com wrote:
   logger.error(FAILED: '%s{50}', '%s', %s, %s % (message,
 route, params, e.code))

 does anything like this exist?

 %.50s

 That's not working in 2.7 or 3.2.

Huh.

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type help, copyright, credits or license for more information.
 print %.5s % (hello there, truncate me!)
hello

-s
-- 
Copyright 2011, all wrongs reversed.  Peter Seebach / usenet-nos...@seebs.net
http://www.seebs.net/log/ -- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) -- get educated!
I am not speaking for my employer, although they do rent some of my opinions.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: truncating strings

2011-08-23 Thread Ethan Furman

Seebs wrote:

On 2011-08-23, Ethan Furman et...@stoneleaf.us wrote:

Seebs wrote:

On 2011-08-23, Roy Smith r...@panix.com wrote:

  logger.error(FAILED: '%s{50}', '%s', %s, %s % (message,
route, params, e.code))



does anything like this exist?



%.50s



That's not working in 2.7 or 3.2.


Huh.

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type help, copyright, credits or license for more information.
 print %.5s % (hello there, truncate me!)
hello


Ah -- that's only part of it -- the OP wants '...' to print as well.  :)

~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list


Re: truncating strings

2011-08-23 Thread Steven D'Aprano
Seebs wrote:

 Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
 [GCC 4.2.1 (Apple Inc. build 5646)] on darwin
 Type help, copyright, credits or license for more information.
  print %.5s % (hello there, truncate me!)
 hello


Well, whadda you know, I learned something new :)


In any case, this doesn't solve the OP's problem, as he wants to truncate
the input string, and append '...' if and only if it were truncated.

The right solution is to wrap the functionality in a function. It's not
hard, and is elegant. Not everything needs to be a built-in.

# Untested.
def truncate(s, maxwidth=50):
if len(s) = maxwidth:
return s
s = s[:maxwidth - 3]
return s + '...'



-- 
Steven

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: truncating strings

2011-08-23 Thread Seebs
On 2011-08-23, Ethan Furman et...@stoneleaf.us wrote:
 Ah -- that's only part of it -- the OP wants '...' to print as well.  :)

O.  Hmm.

That's harder.  I can't think of a pretty way, so I think I'd probably
write a prettytrunc(string, len) or something similar.

-s
-- 
Copyright 2011, all wrongs reversed.  Peter Seebach / usenet-nos...@seebs.net
http://www.seebs.net/log/ -- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) -- get educated!
I am not speaking for my employer, although they do rent some of my opinions.
-- 
http://mail.python.org/mailman/listinfo/python-list