OSDN Git Service

Re implement cachefile.py
[fukui-no-namari/fukui-no-namari.git] / src / FukuiNoNamari / misc.py
index eb29558..27ebbed 100644 (file)
@@ -19,6 +19,7 @@ import os.path
 import re
 import threading
 from datetime import tzinfo, timedelta, datetime
+import itertools
 
 import config
 from BbsType import bbs_type_exception
@@ -176,3 +177,29 @@ class FileWrap:
                 os.makedirs(basedir)
             self.__file = file(self.__path, self.__mode)
         return self.__file
+
+def unpack_ifilter(predicate, iterable):
+    """For multiple argument"""
+    for item in iterable:
+        if predicate(*item):
+            yield item
+
+def split_key_and_value(key_equal_value):
+    try:
+        index = key_equal_value.index("=")
+    except ValueError:
+        pass
+    else:
+        key = key_equal_value[:index]
+        value = key_equal_value[index+1:]
+        return key, value
+
+def tabbed_to_dict_generator(tabbed, sep="\t"):
+    iterable = tabbed.rstrip().split(sep)
+    iterable = itertools.imap(split_key_and_value, iterable)
+    iterable = itertools.ifilter(None, iterable)
+    return iterable
+
+def tabbed_to_dict(tabbed, sep="\t"):
+    """Creates a dict from key equal value pairs seperated with tab"""
+    return dict([pair for pair in tabbed_to_dict_generator(tabbed, sep)])