# clipbrd.py
"""
# Examples:
>>> import clipbrd as cb
>>> D = [range(5) for i in range(3)]
>>> D
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> print cb._buildstr(D)
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
>>> print cb._buildstr(D, transpose=True)
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
>>> cb.clipboard_put(D, transpose=True)
# Now paste into your favourite spread sheet, probably by ctrl-v.
>>> print cb._buildstr(458.78, replace=('.', ','))
458,78
>>> print cb._buildstr(range(5))
0 1 2 3 4
>>> print cb._buildstr(range(5), transpose=True)
0
1
2
3
4
>>> print cb._buildstr([('1A', '1B'), ('2A', '2B')])
1A 1B
2A 2B
>>> print cb._buildstr([('1A', '1B'), ('2A', '2B')], transpose=True)
1A 2A
1B 2B
"""
import Tkinter as tk
def _buildstr(D, transpose=False, replace=None):
"""Construct a string suitable for a spreadsheet.
D: scalar, 1d or 2d sequence
For example a list or a list of lists.
transpose: Bool
Transpose the data if True.
replace: tuple or None
If tuple, it is two strings to pass to the replace
method. ('toreplace', 'replaceby')
"""
try:
D[0]
except (TypeError, IndexError):
D = [D]
try:
D[0][0]
except (TypeError, IndexError):
D = [D]
if transpose:
D = zip(*D)
if not replace:
rows = ['\t'.join([str(v) for v in row]) for row in D]
else:
rows = ['\t'.join([str(v).replace(*replace)
for v in row]) for row in D]
S = '\n'.join(rows)
return S
def clipboard_put(D, transpose=False, replace=None):
"""Construct a string suitable for a spreadsheet and put it into the
clipboard.
D: scalar, 1d or 2d sequence
For example a list or a list of lists.
transpose: Bool
Transpose the data if True.
replace: tuple or None
If tuple, it is two strings to pass to the replace
method. ('toreplace', 'replaceby')
"""
s = _buildstr(D, transpose, replace)
r = tk.Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append(s)
r.destroy()
Diff to Previous Revision
--- revision 2 2014-09-15 20:23:28
+++ revision 3 2014-09-16 15:49:07
@@ -96,3 +96,4 @@
r.withdraw()
r.clipboard_clear()
r.clipboard_append(s)
+ r.destroy()