def proc(self, context: CommandContext): rows = [] sql = self.__params.main_sql # Rowラッパーに変換 rows = [] if self.__params.batch_count <= 0: # まとめてインサート rows = [Row(row) for row in context.get_rows()] if len(rows) > 0: self.__dbService.execute_updates(self.__cursor, sql, rows) self.__db.commit() logger.info(f"executed {len(rows)} parameters..") else: # 指定件数ずつまとめて実行 insRows = [] for row in context.get_rows(): insRows.append(Row(row)) if len(insRows) == self.__params.batch_count: rows = rows + insRows self.__dbService.execute_updates(self.__cursor, sql, insRows) logger.info(f"executed {len(insRows)} parameters.") insRows = [] self.__db.commit() if len(insRows) > 0: rows = rows + insRows self.__dbService.execute_updates(self.__cursor, sql, insRows) logger.info(f"executed {len(insRows)} parameters.") # 次のコマンドへ引渡し context.set_rows(rows)
def proc(self, context: CommandContext): targets = self.__args.target_keys newRows = [Row(row) for row in context.get_rows()] if len(newRows) == 0: return rowColumns = [len(r.keys()) for r in newRows] index = rowColumns.index(max(rowColumns)) if len(newRows) == 0: return if len(targets) == 0: targets = newRows[index].keys() table = prettytable.PrettyTable(targets) # アラインの設定 for key in targets: val = newRows[0].get(key) table.align[key] = 'l' if type(val) == int: table.align[key] = 'r' if type(val) == bool: table.align[key] = 'c' for row in newRows: table.add_row([row.get(target) for target in targets]) print(table) context.set_rows(newRows)
def proc(self, context: CommandContext): """ メイン処理を行います。 context.get_rows()を呼び出して、データ行を取得しながら、 データ加工を行ってください。 渡されてくるデータは、イテレータの場合もあるので、次に 引き継ぐために、context.set_rows()で、データを引き渡してください。 """ # 次へ引き渡す行 rows = [row for row in context.get_rows()] if len(rows) == 0: return rows if type(rows[0]) == Row: rows = [row.raw() for row in rows] output_path = self.__params.output.format(**rows[0]) # テンプレートを適用 result = self.__template.render(rows=rows, args=self.__params.args) with open(output_path, 'w') as f: f.write(result) # 次のコマンドへ引渡し context.set_rows(rows)
def proc(self, context: CommandContext): """ メイン処理を行います。 context.get_rows()を呼び出して、データ行を取得しながら、 データ加工を行ってください。 渡されてくるデータは、イテレータの場合もあるので、次に 引き継ぐために、context.set_rows()で、データを引き渡してください。 """ # 次へ引き渡す行 rows = [] for row in iter(context.get_rows()): # Rowラッパーに変換 row = Row(row) if self.__write_header == False: self.__write_header = True headers = self.__params.headers if len(self.__params.headers) == 0: headers = row.keys() self.__headers = headers if self.__params.header: self.__writer.writerow(headers) rows.append(row) # 行を追加 self.__writer.writerow([row.get(x) for x in self.__headers]) # 次のコマンドへ引渡し context.set_rows(rows)
def proc(self, context: CommandContext): """ メイン処理を行います。 context.get_rows()を呼び出して、データ行を取得しながら、 データ加工を行ってください。 渡されてくるデータは、イテレータの場合もあるので、次に 引き継ぐために、context.set_rows()で、データを引き渡してください。 """ rows = [] for row in context.get_rows(): if type(row) == Row: rows.append(objdict(row.raw())) else: rows.append(objdict(row)) local = { 'input_rows': rows, 'output_rows': [], 'args': self.__params.args } # スクリプトの実行を行う try: exec(self.__script, self.__modules, local) except Exception as e: logger.error(e) raise e # 次のコマンドへ引渡し context.set_rows(local['output_rows'])
def proc(self, context: CommandContext): """ メイン処理を行います。 context.get_rows()を呼び出して、データ行を取得しながら、 データ加工を行ってください。 渡されてくるデータは、イテレータの場合もあるので、次に 引き継ぐために、context.set_rows()で、データを引き渡してください。 """ # 次へ引き渡す行 rows = [] for row in iter(context.get_rows()): # Rowラッパーに変換 row = Row(row) print(row) rows.append(row) # 次のコマンドへ引渡し context.set_rows(rows)
def proc(self, context: CommandContext): """ メイン処理を行います。 context.get_rows()を呼び出して、データ行を取得しながら、 データ加工を行ってください。 渡されてくるデータは、イテレータの場合もあるので、次に 引き継ぐために、context.set_rows()で、データを引き渡してください。s """ # 親データを保存 if self.__iter_parent == None: self.__iter_parent = iter([row for row in context.get_rows()]) self.__has_parent_data = True # 親から1行取得する if self.__iter_current == None: try: self.__parent_row = {} if self.__has_parent_data: self.__parent_row = Row(next(self.__iter_parent)) except StopIteration: self.__has_parent_data = False self.__iter_parent = None context.set_rows([]) return if self.__iter_current == None: # このコマンドが提供するデータの取得処理を行う。 # 例)ファイルをオープンして、データを読み込む if not self.__has_parent_data: self.__has_current_data = False context.set_rows([]) return # データ取得処理 newRows = [] newRows = self.get_new_data(self.__parent_row) # 取得したデータを、未加工のまま次の処理へ self.__iter_current = iter(newRows) retRows = [] while True: try: row = {} row = next(self.__iter_current) except StopIteration: self.__iter_current = None self.__has_current_data = False context.set_rows(retRows) return # 返却データを追加 newRow = self.create_new_row(row) if newRow == None: continue retRows.append(newRow) # フェッチサイズに達したらwhileループ終了 if self.__fetch_size > 0 and len(retRows) == self.__fetch_size: break # データを設定 context.set_rows(retRows)
def proc(self, context: CommandContext): """ メイン処理を行います。 context.get_rows()を呼び出して、データ行を取得しながら、 データ加工を行ってください。 渡されてくるデータは、イテレータの場合もあるので、次に 引き継ぐために、context.set_rows()で、データを引き渡してください。 """ # 正規表現取得 reg = self.__reg # マッチングターゲットキーを取得 target_key = self.__params.target_key # 結果格納用のキーを取得 match_result_key = self.__params.match_result_key # 出力用のフィールド output = self.__params.output_keys # 次へ引き渡す行 rows = [] for row in iter(context.get_rows()): if type(row) == dict: row = dict(row) if type(row) == Row: row = dict(row.raw()) # Rowラッパーに変換 row = Row(row) row.set(match_result_key, False) # 検索対象文字列を取得 line = row.get(target_key) if line == None: continue newRow = dict(output) # 正規表現マッチング pos = None matchResult = reg.match(line) if matchResult: # マッチ結果を保存 row.set(match_result_key, True) # グループ1の発見場所を保存 groups = matchResult.groups() if len(groups) > 0: pos = matchResult.start(1) if len(groups) > 0: # 正規表現のマッチング結果を、置換します。 if self.__params.extract_type == 'index': for key in self.__params.group_key_map: index = int(self.__params.group_key_map[key]) newRow[key] = groups[index - 1] else: # ?Pで指定された正規表現のマッチ結果を抽出 d = matchResult.groupdict() for key in d.keys(): newRow[key] = d[key] elif self.__params.skip_unmatch: continue row.set('pos', pos) # 結果をマージ for key in newRow.keys(): row.set(key, newRow.get(key)) rows.append(row.raw()) # 次のコマンドへ引渡し context.set_rows(rows)