mirror of
https://github.com/YunoHost/moulinette.git
synced 2024-09-03 20:06:31 +02:00
[enh] Add text utils with searching helpers
This commit is contained in:
parent
ac75505897
commit
6c726f3c2f
1 changed files with 50 additions and 0 deletions
50
moulinette/utils/text.py
Normal file
50
moulinette/utils/text.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
import re
|
||||||
|
import mmap
|
||||||
|
|
||||||
|
|
||||||
|
# Searching helpers ----------------------------------------------------
|
||||||
|
|
||||||
|
def search(pattern, text, count=0, flags=0):
|
||||||
|
"""Search for pattern in a text
|
||||||
|
|
||||||
|
Scan through text looking for all locations where the regular
|
||||||
|
expresion pattern matches, and return them as a list of strings.
|
||||||
|
|
||||||
|
The optional argument count is the maximum number of pattern
|
||||||
|
occurences to return; count must be an integer. If omitted or zero,
|
||||||
|
all occurences will be returned. If it's a negative number, occurences
|
||||||
|
to return will be counted backward. If only one occurence is
|
||||||
|
requested, it will be returned as a string.
|
||||||
|
|
||||||
|
The expression's behaviour can be modified by specifying a flags value.
|
||||||
|
Refer to the re module documentation for available variables.
|
||||||
|
|
||||||
|
"""
|
||||||
|
match = re.findall(pattern, text, flags)
|
||||||
|
if not match:
|
||||||
|
return None
|
||||||
|
if not count:
|
||||||
|
return match
|
||||||
|
|
||||||
|
# Limit result depending on count value
|
||||||
|
limit = min(len(match), abs(count))
|
||||||
|
if count < 0:
|
||||||
|
match = match[-limit:]
|
||||||
|
else:
|
||||||
|
match = match[:limit]
|
||||||
|
if abs(count) == 1:
|
||||||
|
return match[0]
|
||||||
|
return match
|
||||||
|
|
||||||
|
def searchf(pattern, path, count=0, flags=re.MULTILINE):
|
||||||
|
"""Search for pattern in a file
|
||||||
|
|
||||||
|
Map the file with given path to memory and search for pattern in it
|
||||||
|
content by using the search function.
|
||||||
|
|
||||||
|
"""
|
||||||
|
with open(path, 'r+') as f:
|
||||||
|
data = mmap.mmap(f.fileno(), 0)
|
||||||
|
match = search(pattern, data, count, flags)
|
||||||
|
data.close()
|
||||||
|
return match
|
Loading…
Add table
Reference in a new issue