1
2
3
4
5
6 """Code for more fancy file handles.
7
8
9 Classes:
10 UndoHandle File object decorator with support for undo-like operations.
11 StringHandle Wraps a file object around a string.
12 SGMLHandle File object that automatically strips SGML tags from data.
13
14 SGMLStripper Object that strips SGML. This is now considered OBSOLETE, and
15 is likely to be deprecated in a future release of Biopython,
16 and later removed.
17
18 """
19 import os
20 import StringIO
21 import sgmllib
22
24 """A Python handle that adds functionality for saving lines.
25
26 Saves lines in a LIFO fashion.
27
28 Added methods:
29 saveline Save a line to be returned next time.
30 peekline Peek at the next line without consuming it.
31
32 """
34 self._handle = handle
35 self._saved = []
36
39
45
47 lines = self._saved + self._handle.readlines(*args,**keywds)
48 self._saved = []
49 return lines
50
52 if self._saved:
53 line = self._saved.pop(0)
54 else:
55 line = self._handle.readline(*args,**keywds)
56 return line
57
58 - def read(self, size=-1):
59 if size == -1:
60 saved = "".join(self._saved)
61 self._saved[:] = []
62 else:
63 saved = ''
64 while size > 0 and self._saved:
65 if len(self._saved[0]) <= size:
66 size = size - len(self._saved[0])
67 saved = saved + self._saved.pop(0)
68 else:
69 saved = saved + self._saved[0][:size]
70 self._saved[0] = self._saved[0][size:]
71 size = 0
72 return saved + self._handle.read(size)
73
75 if line:
76 self._saved = [line] + self._saved
77
79 if self._saved:
80 line = self._saved[0]
81 else:
82 line = self._handle.readline()
83 self.saveline(line)
84 return line
85
90
91 - def seek(self, *args):
92 self._saved = []
93 self._handle.seek(*args)
94
96 return getattr(self._handle, attr)
97
100
101 - def __exit__(self, type, value, traceback):
103
104
105
106
107
108 StringHandle = StringIO.StringIO
109
110
111
113 """A Python handle that automatically strips SGML tags from data (OBSOLETE).
114
115 This module is now considered to be obsolete, and is likely to be
116 deprecated in a future release of Biopython, and later removed.
117 """
119 """SGMLStripper(handle)
120
121 handle is a file handle to SGML-formatted data.
122
123 """
124 self._handle = handle
125 self._stripper = SGMLStripper()
126
127 - def read(self, *args, **keywds):
130
132 line = self._handle.readline(*args, **keywds)
133 return self._stripper.strip(line)
134
136 lines = self._handle.readlines(*args, **keywds)
137 for i in range(len(lines)):
138 lines[i] = self._stripper.strip(str)
139 return lines
140
142 return getattr(self._handle, attr)
143
144
152
155
157 """S.strip(str) -> string
158
159 Strip the SGML tags from str.
160
161 """
162 if not str:
163 return ''
164
165
166
167
168
169 is_newline = str[-1] in ['\n', '\r']
170
171 self._parser.data = ''
172 self._parser.feed(str)
173 if self._parser.data:
174 str = self._parser.data
175 elif is_newline:
176 str = '\n'
177 else:
178 str = ''
179 return str
180