annotate hexagram-6ae12361157c/hexagram/tsv.py @ 0:1407e3634bcf draft default tip

Uploaded r11 from test tool shed.
author adam-novak
date Tue, 22 Oct 2013 14:17:59 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
1 #!/usr/bin/env python2.7
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
2 # tsv.py: a module for writing TSV (tab-separated value) files
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
3 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
4 This module defines two classes: a TsvWriter, which can be constructed on a
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
5 stream to allow writing TSV data lines and #-delimited comments to that stream,
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
6 and a TsvReader, which can be constructed on a stream and iterated over to
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
7 obtain lists of the values from each non-comment line in the stream.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
8
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
9 TSV is most useful as the basis for other, more tightly specified file formats.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
10
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
11 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
12
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
13 class TsvWriter(object):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
14 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
15 Represents a writer for tab-separated value files containing #-delimited
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
16 comments.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
17
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
18 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
19 def __init__(self, stream):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
20 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
21 Make a new TsvWriter for writing TSV data to the given stream.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
22 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
23
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
24 # This holds the stream
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
25 self.stream = stream
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
26
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
27
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
28 def line(self, *args):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
29 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
30 Write the given values to the file, as a TSV line. Args holds a list of
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
31 all arguments passed. Any argument that stringifies to a string legal as
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
32 a TSV data item can be written.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
33
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
34 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
35
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
36 self.list_line(args)
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
37
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
38
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
39 def list_line(self, line):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
40 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
41 Write the given iterable of values (line) to the file as items on the
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
42 same line. Any argument that stringifies to a string legal as a TSV data
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
43 item can be written.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
44
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
45 Does not copy the line or build a big string in memory.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
46 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
47
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
48 if len(line) == 0:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
49 return
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
50
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
51 self.stream.write(str(line[0]))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
52
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
53 for item in line[1:]:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
54 self.stream.write("\t")
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
55 self.stream.write(str(item))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
56
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
57 self.stream.write("\n")
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
58
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
59 def comment(self, text):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
60 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
61 Write the given text as a TSV comment. text must be a string containing
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
62 no newlines.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
63
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
64 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
65
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
66 self.stream.write("# {}\n".format(text))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
67
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
68 def close(self):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
69 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
70 Close the underlying stream.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
71 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
72
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
73 self.stream.close()
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
74
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
75 class TsvReader(object):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
76 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
77 Represents a reader for tab-separated value files. Skips over comments
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
78 starting with #. Can be iterated over.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
79
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
80 Field values consisting of only whitespace are not allowed.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
81 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
82
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
83 def __init__(self, stream):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
84 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
85 Make a new TsvReader to read from the given stream.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
86 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
87
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
88 self.stream = stream
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
89
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
90 def __iter__(self):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
91 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
92 Yields lists of all fields on each line, as strings, until all lines are
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
93 exhausted. Strips whitespace around field contents.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
94 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
95
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
96 for line in self.stream:
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
97 line = line.strip()
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
98 if line == "" or line[0] == "#":
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
99 # Skip comments and empty lines
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
100 continue
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
101
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
102 yield map(str.strip, line.split("\t"))
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
103
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
104 def close(self):
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
105 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
106 Close the underlying stream.
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
107 """
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
108
1407e3634bcf Uploaded r11 from test tool shed.
adam-novak
parents:
diff changeset
109 self.stream.close()