1
2
3
4
5
6 """Code for more fancy file handles.
7
8
9 Classes:
10
11 UndoHandle File object decorator with support for undo-like operations.
12
13 StringHandle Wraps a file object around a string.
14
15 SGMLStripper Object that strips SGML. This is now DEPRECATED, and is likely
16 to be removed in a future release of Biopython.
17
18 """
19 import StringIO
20
22 """A Python handle that adds functionality for saving lines.
23
24 Saves lines in a LIFO fashion.
25
26 Added methods:
27 saveline Save a line to be returned next time.
28 peekline Peek at the next line without consuming it.
29
30 """
32 self._handle = handle
33 self._saved = []
34
37
43
45 lines = self._saved + self._handle.readlines(*args,**keywds)
46 self._saved = []
47 return lines
48
50 if self._saved:
51 line = self._saved.pop(0)
52 else:
53 line = self._handle.readline(*args,**keywds)
54 return line
55
56 - def read(self, size=-1):
57 if size == -1:
58 saved = "".join(self._saved)
59 self._saved[:] = []
60 else:
61 saved = ''
62 while size > 0 and self._saved:
63 if len(self._saved[0]) <= size:
64 size = size - len(self._saved[0])
65 saved = saved + self._saved.pop(0)
66 else:
67 saved = saved + self._saved[0][:size]
68 self._saved[0] = self._saved[0][size:]
69 size = 0
70 return saved + self._handle.read(size)
71
73 if line:
74 self._saved = [line] + self._saved
75
77 if self._saved:
78 line = self._saved[0]
79 else:
80 line = self._handle.readline()
81 self.saveline(line)
82 return line
83
88
89 - def seek(self, *args):
90 self._saved = []
91 self._handle.seek(*args)
92
94 return getattr(self._handle, attr)
95
98
99 - def __exit__(self, type, value, traceback):
101
102
103
104
105
106 StringHandle = StringIO.StringIO
107
108 try:
109 import sgmllib
110 except ImportError:
111
112
113 pass
114 else:
116 """Object to strip SGML tags (OBSOLETE)."""
123
129
131 """S.strip(str) -> string
132
133 Strip the SGML tags from str.
134
135 """
136 if not str:
137 return ''
138
139
140
141
142
143 is_newline = str[-1] in ['\n', '\r']
144
145 self._parser.data = ''
146 self._parser.feed(str)
147 if self._parser.data:
148 str = self._parser.data
149 elif is_newline:
150 str = '\n'
151 else:
152 str = ''
153 return str
154