Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > truncating strings

Reply
Thread Tools

truncating strings

 
 
Roy Smith
Guest
Posts: n/a
 
      08-23-2011
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?
 
Reply With Quote
 
 
 
 
Chris Rebert
Guest
Posts: n/a
 
      08-23-2011
On Tue, Aug 23, 2011 at 9:29 AM, Roy Smith <(E-Mail Removed)> 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
 
Reply With Quote
 
 
 
 
Seebs
Guest
Posts: n/a
 
      08-23-2011
On 2011-08-23, Roy Smith <(E-Mail Removed)> 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 / http://www.velocityreviews.com/forums/(E-Mail Removed)
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.
 
Reply With Quote
 
Seebs
Guest
Posts: n/a
 
      08-23-2011
On 2011-08-23, Ethan Furman <(E-Mail Removed)> wrote:
> Seebs wrote:
>> On 2011-08-23, Roy Smith <(E-Mail Removed)> 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 / (E-Mail Removed)
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.
 
Reply With Quote
 
Ethan Furman
Guest
Posts: n/a
 
      08-23-2011
Seebs wrote:
> On 2011-08-23, Roy Smith <(E-Mail Removed)> 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~
 
Reply With Quote
 
Ethan Furman
Guest
Posts: n/a
 
      08-23-2011
Seebs wrote:
> On 2011-08-23, Ethan Furman <(E-Mail Removed)> wrote:
>> Seebs wrote:
>>> On 2011-08-23, Roy Smith <(E-Mail Removed)> 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~
 
Reply With Quote
 
Steven D'Aprano
Guest
Posts: n/a
 
      08-24-2011
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

 
Reply With Quote
 
Seebs
Guest
Posts: n/a
 
      08-24-2011
On 2011-08-23, Ethan Furman <(E-Mail Removed)> wrote:
> Ah -- that's only part of it -- the OP wants '...' to print as well.


Ohhhh. 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 / (E-Mail Removed)
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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Strings, Strings and Damned Strings Ben C Programming 14 06-24-2006 05:09 AM
truncating java 'doubles' BemusedByQM Java 2 07-25-2005 01:17 PM
Truncating Variables Jason Williard ASP .Net 11 10-18-2004 01:27 PM
System.web.mail truncating message body - strange behaviour ?? Jitesh Sinha ASP .Net 1 12-05-2003 03:04 PM
JavaService append mode instead of truncating log file uy_do Java 1 12-04-2003 02:42 AM



Advertisments