MathCurvesSurfacesWallpaper GroupsGallerySoftwarePOV-Ray
ProgramingLinuxPerl PythonHTMLCSSJavaScriptPHPJavaEmacsUnicode ♥
Web Hosting by 1&1

Python, Ruby, Perl: Formatting Strings

Xah Lee, , …,

Python

# -*- coding: utf-8 -*-
# python

ss = [3, 4, 3.123456789012345678901234567890, (7, 8, "9")]
print (str(ss))         # [3, 4, 3.1234567890123457, (7, 8, '9')]
print (repr(ss))        # [3, 4, 3.1234567890123457, (7, 8, '9')]

The “print” function itself supports string formatting in the style of C's printf.

#-*- coding: utf-8 -*-
# python

# integer
print "%d" % (1234)             # 「1234」

# padding by space
print "%4d" % (12)              # 「  12」

# float. 2 integer, 4 decimal
print "%2.4f" % (3.123456789)   # 「3.1235」

# string.
print "%5s" % ("cats")          # 「 cats」
print "%2s" % ("cats")          # 「cats」

print "%2d◇%6d◇%2.4f◇%s" % (1234, 5678, 3.123456789, 'cats!') # 「1234◇  5678◇3.1235◇cats!」

A better style to format is to use ‹string›.format(…).

# -*- coding: utf-8 -*-
# python

# “:s” is for string
print "{:s}".format("cat")          # cat

# “:s” is default, and can be omitted.
print "{}".format([3, 4])          # [3, 4]

# decimal int
print "{:d}".format(3)          # 3

# binary
print "{:b}".format(3)          # 11

# hex
print "{:x}".format(10)          # a

# formatting multiple args
print "{:d}, {:s}, {:s}".format(3, "cat", [7, 8])

# use {{}} to include literal {}
print "brace {{}}, a is {}".format(3)     # brace {}, a is 3

You can refer to the argument and change print order.

# -*- coding: utf-8 -*-
# python

print "{0:d}, {1:s}, {2:s}".format(3, "cat", [7, 8]) # 3, cat, [7, 8]

print "{1:s}, {0:d}, {2:s}".format(3, "cat", [7, 8]) # cat, 3, [7, 8]

Printing Without Newline

To print without the newline char added at the end, add a comma. Example:

# -*- coding: utf-8 -*-
# python

print "rabbit",                 # suppress printing newline
print "tiger"

# prints 「rabbit tiger」

Or, use “sys.stdout.write”. Example:

# -*- coding: utf-8 -*-
# python

import sys
sys.stdout.write("rabbit")
sys.stdout.write("tiger")

# output: 「rabbittiger」

See also: Python 3: Formatting String

Ruby

In Ruby, you can use any of {p, puts, print} to print.

You can embed variables or any Ruby code, like this:

# -*- coding: utf-8 -*-
# ruby

aa = 3

puts "#{aa} tigers"             # 「3 tigers」

puts "#{3 + 4} tigers"          # 「7 tigers」

Ruby also support the C style sprintf. Example:

#-*- coding: utf-8 -*-
# ruby

# integer
puts '%d' % 1234                # 「1234」

# padding by space
puts '%4d' % 12                 # 「  12」

# float. 2 integer, 4 decimal
puts '%2.4f' % 3.123456789      # 「3.1235」

# string.
puts '%5s' % 'cats'             # 「 cats」
puts '%2s' % 'cats'             # 「cats」

puts '%2d◇%6d◇%2.4f◇%s' % [1234, 5678, 3.123456789, 'cats!'] # 「1234◇  5678◇3.1235◇cats!」

What's the difference between {“puts”, “p”, “print”}?

http://ruby-doc.org/core-1.9.3/Kernel.html#method-i-p

Perl

In Perl, if you want to print arrays or hashes for later reading into Perl program, you'll need to use “Data::Dumper” module.

#-*- coding: utf-8 -*-
# perl

use Data::Dumper;
$Data::Dumper::Indent = 0;      # set it to print in a compact way

@ss = (3, 4, 5);
%ss = qw(mary 17 jane 18 alice 19);
# qw for autoquote, same as ('mary' => 17, 'jane' => 18, 'alice' => 19)

print Dumper(\@ss), "\n";       # $VAR1 = [3,4,5];
print Dumper(\%ss), "\n";       # $VAR1 = {'jane' => 18,'alice' => 19,'mary' => 17};

For formatting strings, you can use “sprintf”, which is like other language's “format”.

Or, you can use “printf”, which is equivalent to print sprintf(FORMAT, LIST).

#-*- coding: utf-8 -*-
# perl

# integer
printf '%d', 1234;              # 「1234」
print "\n";

# padding by space
printf '%4d', 12;               # 「  12」
print "\n";

# float. 2 integer, 4 decimal
printf '%2.4f', 3.123456789;    # 「3.1235」
print "\n";

# string.
printf '%5s', 'cats';          # 「 cats」
print "\n";
printf '%2s', 'cats';          # 「cats」
print "\n";

printf ('%2d◇%6d◇%2.4f◇%s', 1234, 5678, 3.1415926, 'cats');
# prints 「1234◇  5678◇3.1416◇cats」

Thanks to Yuri Khan for a suggetion on Python print.

blog comments powered by Disqus