StringUtil.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: euc-jp -*-
3 
4 
16 
17 
18 
19 import string
20 
21 
44 def isEscaped(_str, pos):
45  pos -= 1
46 
47  i = 0
48  while pos >= 0 and _str[pos] == "\\":
49  i += 1
50  pos -= 1
51 
52  return i % 2 == 1
53 
54 
55 
63  def __init__(self):
64  self._str = ""
65 
66  def __call__(self,c):
67  if c == '\t':
68  self._str += "\\t"
69  elif c == '\n':
70  self._str += "\\n"
71  elif c == '\f':
72  self._str += "\\f"
73  elif c == '\r':
74  self._str += "\\r"
75  elif c == '\\':
76  self._str += "\\\\"
77  else:
78  self._str += c
79 
80 
81 
89  def __init__(self):
90  self.count = 0
91  self._str = ""
92 
93  def __call__(self,c):
94  if c == "\\":
95  self.count += 1
96  if not (self.count % 2):
97  self._str += c
98  else:
99  if self.count > 0 and (self.count % 2):
100  self.count = 0
101  if c == 't':
102  self._str+='\t'
103  elif c == 'n':
104  self._str+='\n'
105  elif c == 'f':
106  self._str+='\f'
107  elif c == 'r':
108  self._str+='\r'
109  elif c == '\"':
110  self._str+='\"'
111  elif c == '\'':
112  self._str+='\''
113  else:
114  self._str+=c
115  else:
116  self.count = 0
117  self._str+=c
118 
119 
120 
128  def __init__(self):
129  self._str = []
130 
131  def __call__(self,s):
132  if self._str.count(s) == 0:
133  return self._str.append(s)
134 
135 
136 
142 def for_each(_str, instance):
143  for i in _str:
144  instance(i)
145 
146  return instance
147 
148 
149 
172 def escape(_str):
173  return for_each(_str, escape_functor())._str
174 
175 
176 
200 def unescape(_str):
201  return for_each(_str, unescape_functor())._str
202 
203 
204 
223 def eraseBlank(str):
224  if len(str) == 0:
225  return
226  str[0] = str[0].strip(" ")
227  l_str = str[0].split(" ")
228  tmp_str = ""
229  for s in l_str:
230  if s:
231  tmp_str+=s.strip(" ")
232 
233  tmp_str = tmp_str.strip('\t')
234  l_str = tmp_str.split('\t')
235  tmp_str = ""
236  for s in l_str:
237  if s:
238  tmp_str+=s.strip('\t')
239 
240  str[0] = tmp_str
241 
242 
243 
255 def eraseHeadBlank(_str):
256  _str[0] = _str[0].lstrip('\t ')
257 
258 
259 
271 def eraseTailBlank(_str):
272  #_str[0] = _str[0].rstrip('\t ')
273  if _str[0] == "":
274  return
275 
276  while (_str[0][-1] == " " or _str[0][-1] == '\t') and not isEscaped(_str[0], len(_str[0]) - 1):
277  _str[0] = _str[0][:-1]
278 
279 
280 #
281 # @if jp
282 # @brief 文字列を正規化する# @else # @brief Erase the head/tail blank and replace upper case to lower case # @endif # def normalize(_str): _str[0] = _str[0].strip().lower() return _str[0] ## # @if jp # @brief 文字列を置き換える # # 与えられた文字列に対して、指定した文字の置き換えを行う。 # # @param str 置き換え処理対象文字列 # @param _from 置換元文字 # @param _to 置換先文字 # # @else # @brief Replace string # @endif def replaceString(str, _from, _to): str[0] = str[0].replace(_from, _to) ## # @if jp # @brief 文字列を分割文字で分割する # # 設定された文字列を与えられたデリミタで分割する。 # # @param input 分割対象文字列 # @param delimiter 分割文字列(デリミタ) # # @return 文字列分割結果リスト # # @else # @brief Split string by delimiter # @endif def split(input, delimiter): if not input: return [] del_result = input.split(delimiter) len_ = len(del_result) result = [] for i in range(len_): if del_result[i] == "" or del_result[i] == " ": continue str_ = [del_result[i]] eraseHeadBlank(str_) eraseTailBlank(str_) result.append(str_[0]) return result ## # @if jp # @brief 与えられた文字列をbool値に変換する # # 指定された文字列を、true表現文字列、false表現文字列と比較し、その結果を # bool値として返す。 # 比較の結果、true表現文字列、false表現文字列のどちらとも一致しない場合は、 # 与えられたデフォルト値を返す。 # # @param _str 判断対象文字列 # @param yes true表現文字列 # @param no false表現文字列 # @param default_value デフォルト値(デフォルト値:None) # @else # @brief Convert given string to bool value # @endif def toBool(_str, yes, no, default_value=None): if default_value is None: default_value = True _str = _str.upper() yes = yes.upper() no = no.upper() if _str.find(yes) != -1: return True elif (_str.find(no)) != -1: return False else: return default_value ## # @if jp # @brief 文字列リスト中にある文字列が含まれるかどうか # # 第1引数にカンマ区切りのリストを、第2引数に探索対象文字列を指定し、 # その文字列が第1引数の中に含まれるかを判断する。 # # @param list 対象リスト # @param value 探索文字列 # @return true: 含まれる、false: 含まれない # # @else # @brief Include if a string is included in string list # # if the second argument is included in the comma separated string # list of the first argument, This operation returns "true value". # # @param list The target comma separated string # @param value The searched string # @return true: included, false: not included # # @endif # # bool includes(const vstring& list, std::string value, # bool ignore_case = true); def includes(_list, value, ignore_case = True): if not (type(_list) == list or type(_list) == str): return False if type(_list) == str: _list = _list.split(",") tmp_list = _list if ignore_case: value = value.lower() tmp_list = map((lambda x: x.lower()),_list) if tmp_list.count(value) > 0: return True return False ## # @if jp # @brief 与えられた文字列が絶対パスかどうかを判断する # # 与えられた文字列が絶対パス表現であるかどうかを判断する。 # 文字列が以下の場合には絶対パスとして判断する。 # - 先頭文字が'/' (UNIXの場合) # - 先頭3文字がアルファベット+'/'+'\\' (Windowsの場合) # - 先頭2文字が'\\\\' (Windowsネットワークパスの場合) # # @param str 判定対象文字列 # # @return 絶対パス判定結果 # # @else # @brief Investigate whether the given string is absolute path or not # @endif def isAbsolutePath(str): if str[0] == "/": return True if str[0].isalpha() and str[1] == ":" and str[2] == "\\": return True if str[0] == "\\" and str[1] == "\\": return True return False ## # @if jp # @brief 与えられた文字列がURLかどうかを判断する # # 与えられた文字列がURL表現かどうかを判断する。 # 与えられた文字列中に、'://'という文字列が含まれている場合には # URL表現として判断する。 # # @param str 判定対象文字列 # # @return URL判定結果 # # @else # @brief Investigate whether the given string is URL or not # @endif def isURL(str): pos = 0 if str == "": return False pos = str.find(":") if pos != 0 and pos != -1 and str[pos+1] == "/" and str[pos+2] == "/": return True return False ## # @if jp # @brief 与えられたオブジェクトを文字列に変換 # # 引数で指定されたオブジェクトを文字列に変換する。 # # @param n 変換対象オブジェクト # # @return 文字列変換結果 # # @else # @brief Convert the given object to st::string. # @endif def otos(n): if type(n) == int or type(n) == str or type(n) == long or type(n) == float: return str(n) ## # @if jp # @brief 与えられた文字列をリストに変換 # # 引数で指定された文字列を「,」で分割し、リストに変換する。 # # @param _type 変換結果リスト # @param _str 変換元文字列 # # @return リスト変換処理結果 # # @else # # @endif def _stringToList(_type, _str): list_ = split(_str,",") len_ = len(list_) if len(_type[0]) < len(list_): sub = len(list_) - len(_type[0]) for i in range(sub): _type[0].append(_type[0][0]) elif len(_type[0]) > len(list_): sub = len(_type[0]) - len(list_) for i in range(sub): del _type[0][-1] for i in range(len_): str_ = [list_[i]] eraseHeadBlank(str_) eraseTailBlank(str_) list_[i] = str_[0] for i in range(len(list_)): if type(_type[0][i]) == int: _type[0][i] = int(list_[i]) elif type(_type[0][i]) == long: _type[0][i] = long(list_[i]) elif type(_type[0][i]) == float: _type[0][i] = float(list_[i]) elif type(_type[0][i]) == str: _type[0][i] = str(list_[i]) else: return False return True ## # @if jp # @brief 与えられた文字列をオブジェクトに変換 # # 引数で与えられた文字列を指定されたオブジェクトに変換する。 # # @param _type 変換先オブジェクト # @param _str 変換元文字列 # # @return 変換処理実行結果 # # @else # @brief Convert the given object to st::string. # @endif def stringTo(_type, _str): if not _str: return False if type(_type[0]) == int: _type[0] = int(_str) return True elif type(_type[0]) == long: _type[0] = long(_str) return True elif type(_type[0]) == float: _type[0] = float(_str) return True elif type(_type[0]) == list: return _stringToList(_type, _str) elif type(_type[0]) == str: _type[0] = str(_str) return True return False ## # @if jp # @brief 与えられた文字列リストから重複を削除 # # 引数で与えられた文字列リストから重複を削除したリストを作成する。 # # @param sv 確認元文字列リスト # # @return 重複削除処理結果リスト # # @else # # @endif def unique_sv(sv): return for_each(sv, unique_strvec())._str ## # @if jp # @brief 与えられた文字列リストからCSVを生成 # # 引数で与えられた文字列リストの各要素を並べたCSVを生成する。 # 文字列リストが空の場合には空白文字を返す。 # # @param sv CSV変換対象文字列リスト # # @return CSV変換結果文字列 # # @else # # @endif def flatten(sv): if len(sv) == 0: return "" _str = ", ".join(sv) return _str ## # @if jp # @brief 与えられた文字列リストを引数リストに変換 # # 引数で与えられた文字列リストの各要素末尾に'\\0'を加え、 # 引数リストに変換する。<br> # ※本モジュールでは引数をそのまま返す # # @param args 変換対象文字列リスト # # @return 引数変換結果文字列 # # @else # # @endif def toArgv(args): return args
283 # @else
284 # @brief Erase the head/tail blank and replace upper case to lower case
285 # @endif
286 #
287 def normalize(_str):
288  _str[0] = _str[0].strip().lower()
289  return _str[0]
290 
291 
292 
305 def replaceString(str, _from, _to):
306  str[0] = str[0].replace(_from, _to)
307 
308 
309 
323 def split(input, delimiter):
324  if not input:
325  return []
326 
327  del_result = input.split(delimiter)
328 
329  len_ = len(del_result)
330 
331  result = []
332  for i in range(len_):
333  if del_result[i] == "" or del_result[i] == " ":
334  continue
335 
336  str_ = [del_result[i]]
337  eraseHeadBlank(str_)
338  eraseTailBlank(str_)
339  result.append(str_[0])
340 
341  return result
342 
343 
344 
360 def toBool(_str, yes, no, default_value=None):
361  if default_value is None:
362  default_value = True
363 
364  _str = _str.upper()
365  yes = yes.upper()
366  no = no.upper()
367 
368  if _str.find(yes) != -1:
369  return True
370  elif (_str.find(no)) != -1:
371  return False
372  else:
373  return default_value
374 
375 
400 def includes(_list, value, ignore_case = True):
401  if not (type(_list) == list or type(_list) == str):
402  return False
403 
404  if type(_list) == str:
405  _list = _list.split(",")
406 
407  tmp_list = _list
408  if ignore_case:
409  value = value.lower()
410  tmp_list = map((lambda x: x.lower()),_list)
411 
412  if tmp_list.count(value) > 0:
413  return True
414 
415  return False
416 
417 
418 
419 
436 def isAbsolutePath(str):
437  if str[0] == "/":
438  return True
439  if str[0].isalpha() and str[1] == ":" and str[2] == "\\":
440  return True
441  if str[0] == "\\" and str[1] == "\\":
442  return True
443 
444  return False
445 
446 
447 
462 def isURL(str):
463  pos = 0
464  if str == "":
465  return False
466 
467  pos = str.find(":")
468  if pos != 0 and pos != -1 and str[pos+1] == "/" and str[pos+2] == "/":
469  return True
470 
471  return False
472 
473 
474 
487 def otos(n):
488  if type(n) == int or type(n) == str or type(n) == long or type(n) == float:
489  return str(n)
490 
491 
492 
493 
507 def _stringToList(_type, _str):
508  list_ = split(_str,",")
509  len_ = len(list_)
510 
511  if len(_type[0]) < len(list_):
512  sub = len(list_) - len(_type[0])
513  for i in range(sub):
514  _type[0].append(_type[0][0])
515  elif len(_type[0]) > len(list_):
516  sub = len(_type[0]) - len(list_)
517  for i in range(sub):
518  del _type[0][-1]
519 
520  for i in range(len_):
521  str_ = [list_[i]]
522  eraseHeadBlank(str_)
523  eraseTailBlank(str_)
524  list_[i] = str_[0]
525 
526  for i in range(len(list_)):
527  if type(_type[0][i]) == int:
528  _type[0][i] = int(list_[i])
529  elif type(_type[0][i]) == long:
530  _type[0][i] = long(list_[i])
531  elif type(_type[0][i]) == float:
532  _type[0][i] = float(list_[i])
533  elif type(_type[0][i]) == str:
534  _type[0][i] = str(list_[i])
535  else:
536  return False
537 
538  return True
539 
540 
541 
555 def stringTo(_type, _str):
556  if not _str:
557  return False
558 
559  if type(_type[0]) == int:
560  _type[0] = int(_str)
561  return True
562  elif type(_type[0]) == long:
563  _type[0] = long(_str)
564  return True
565  elif type(_type[0]) == float:
566  _type[0] = float(_str)
567  return True
568  elif type(_type[0]) == list:
569  return _stringToList(_type, _str)
570  elif type(_type[0]) == str:
571  _type[0] = str(_str)
572  return True
573 
574  return False
575 
576 
577 
590 def unique_sv(sv):
591  return for_each(sv, unique_strvec())._str
592 
593 
594 
608 def flatten(sv):
609  if len(sv) == 0:
610  return ""
611 
612  _str = ", ".join(sv)
613 
614  return _str
615 
616 
617 
632 def toArgv(args):
633  return args
def replaceString(str, _from, _to)
Replace string.
Definition: StringUtil.py:305
def eraseHeadBlank(_str)
Erase the head blank characters of string.
Definition: StringUtil.py:255
def split(input, delimiter)
Split string by delimiter.
Definition: StringUtil.py:323
def for_each(_str, instance)
Definition: StringUtil.py:142
def unescape(_str)
Unescape string.
Definition: StringUtil.py:200
def otos(n)
Convert the given object to st::string.
Definition: StringUtil.py:487
def stringTo(_type, _str)
Convert the given object to st::string.
Definition: StringUtil.py:555
def escape(_str)
Escape string.
Definition: StringUtil.py:172
def isEscaped(_str, pos)
Whether the character is escaped or not.
Definition: StringUtil.py:44
def isURL(str)
Investigate whether the given string is URL or not.
Definition: StringUtil.py:462
def eraseTailBlank(_str)
Erase the tail blank characters of string.
Definition: StringUtil.py:271
def isAbsolutePath(str)
Investigate whether the given string is absolute path or not.
Definition: StringUtil.py:436
def includes(_list, value, ignore_case=True)
Include if a string is included in string list.
Definition: StringUtil.py:400
def eraseBlank(str)
Erase blank characters of string.
Definition: StringUtil.py:223
def _stringToList(_type, _str)
Definition: StringUtil.py:507
def toBool(_str, yes, no, default_value=None)
Convert given string to bool value.
Definition: StringUtil.py:360
def append(dest, src)
Definition: NVUtil.py:386


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Mon Feb 28 2022 23:01:06