implement convenience wrapper for text.extract functionality
This commit is contained in:
@@ -149,6 +149,20 @@ def extract_iter(txt, begin, end, pos=0):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def extract_from(txt, pos=0, default=""):
|
||||||
|
"""Returns a function object that extracts from 'txt'"""
|
||||||
|
def extr(begin, end, index=txt.index, txt=txt):
|
||||||
|
nonlocal pos
|
||||||
|
try:
|
||||||
|
first = index(begin, pos) + len(begin)
|
||||||
|
last = index(end, first)
|
||||||
|
pos = last + len(end)
|
||||||
|
return txt[first:last]
|
||||||
|
except (ValueError, TypeError, AttributeError):
|
||||||
|
return default
|
||||||
|
return extr
|
||||||
|
|
||||||
|
|
||||||
def parse_bytes(value, default=0, suffixes="bkmgtp"):
|
def parse_bytes(value, default=0, suffixes="bkmgtp"):
|
||||||
"""Convert a bytes-amount ("500k", "2.5M", ...) to int"""
|
"""Convert a bytes-amount ("500k", "2.5M", ...) to int"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -235,6 +235,23 @@ class TestText(unittest.TestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
g(txt, "[", "]", 6), ["a", "d"])
|
g(txt, "[", "]", 6), ["a", "d"])
|
||||||
|
|
||||||
|
def test_extract_from(self, f=text.extract_from):
|
||||||
|
txt = "[c][b][a]: xyz! [d][e"
|
||||||
|
|
||||||
|
e = f(txt)
|
||||||
|
self.assertEqual(e("[", "]"), "c")
|
||||||
|
self.assertEqual(e("[", "]"), "b")
|
||||||
|
self.assertEqual(e("[", "]"), "a")
|
||||||
|
self.assertEqual(e("[", "]"), "d")
|
||||||
|
self.assertEqual(e("[", "]"), "")
|
||||||
|
self.assertEqual(e("[", "]"), "")
|
||||||
|
|
||||||
|
e = f(txt, pos=6, default="END")
|
||||||
|
self.assertEqual(e("[", "]"), "a")
|
||||||
|
self.assertEqual(e("[", "]"), "d")
|
||||||
|
self.assertEqual(e("[", "]"), "END")
|
||||||
|
self.assertEqual(e("[", "]"), "END")
|
||||||
|
|
||||||
def test_parse_bytes(self, f=text.parse_bytes):
|
def test_parse_bytes(self, f=text.parse_bytes):
|
||||||
self.assertEqual(f("0"), 0)
|
self.assertEqual(f("0"), 0)
|
||||||
self.assertEqual(f("50"), 50)
|
self.assertEqual(f("50"), 50)
|
||||||
|
|||||||
Reference in New Issue
Block a user