Az ODI (Oracle Data Integrator) és python kapcsolata a JPython kiterjesztett funkció.
Alavetően SQL, PL-SQL szelven kommunikál a töltő MAP fejlesztés és a hozzájuk kapcsolódó procedurákban, knowledge modul-oknál.
#coding=utf-8
def section_1():
p = (4, 5)
x, y = p
print(x)
print(y)
data = ['ACME', 50, 19.1, (2012, 12, 21)]
name, shares, price, date = data
print(name)
print(date)
name, shares, price, (year, mon, day) = data
print(year)
print(mon)
# ????????????
s = "Hello"
a,b,c,d,e = s
print(a)
print(e)
# ?????????????
_, shares, price, _ = data
print(shares)
print(price)
def section_2():
'''
# ??*????????
record = ('Dave', 'dave@example.com', '777-555-1123', '888-444-2342')
name, email, *phone_numbers = record
print(name)
print(phone_numbers)
def do_foo(x, y):
print('foo', x, y)
def do_bar(s):
print('bar', s)
records = [('foo', 1, 2), ('bar', 'hello'), ('foo', 3, 4)]
for tag, *args in records:
if tag == 'fooo':
do_foo(*args)
elif tag == 'bar':
do_bar(*args)
# ??_???????????
data = ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = data
print(name)
print(year)
'''
from collections import deque
def section_3():
def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
with open('/Users/liuqiang/code/Python/Python-cookbook/???:???????/somefile.txt') as f:
for line, prevlines in search(f, 'python', 5):
for pline in prevlines:
print(pline)
print(line)
print('-' * 20)
import heapq
def section_4():
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
print(cheap)
print(expensive)
from collections import defaultdict
def section_5():
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)
print(d)
d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)
print(d)
pairs = {'a' : [1, 2, 3], 'b' : [4, 5]}
d = {}
for key, value in pairs.items():
if key not in d:
d[key] = []
d[key].append(value)
print(d)
# ??defaultdict????key???????if????
d = defaultdict(list)
for key, value in pairs.items():
d[key].append(value)
print(d)
from collections import OrderedDict
import json
def section_7():
# OrderedDict????????????
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
for key in d:
print(key, d[key])
str = json.dumps(d)
print(str)
def section_8():
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# zip()????????(key,value)????
min_price = min(zip(prices.values(), prices.keys()))
print(min_price)
max_price = max(zip(prices.values(), prices.keys()))
print(max_price)
prices_sorted = sorted(zip(prices.values(), prices.keys()))
print(prices_sorted)
prices_and_names = zip(prices.values(), prices.keys())
print(min(prices_and_names))
# error:zip()??????????????????
# print(max(prices_and_names))
# ???????????
min_price_value = min(prices.values())
max_price_value = max(prices.values())
print(min_price_value)
print(max_price_value)
# ??????????key
min_price_key = min(prices, key=lambda k: prices[k])
max_price_key = max(prices, key=lambda k: prices[k])
print(min_price_key)
print(max_price_key)
def section_9():
a = {
'x' : 1,
'y' : 2,
'z' : 3,
}
b = {
'w' : 10,
'x' : 11,
'y' : 2
}
#dict?????????????
common_keys = a.keys() & b.keys()
different_keys = a.keys() - b.keys()
union_keys = a.keys() | b.keys()
common_keys_and_values = a.items() & b.items()
print(common_keys)
print(different_keys)
print(union_keys)
print(common_keys_and_values)
filter_dict = {key:a[key] for key in a.keys() - {'z', 'w'}}
print(filter_dict)
#??????
def section_10():
def dedupe(items):
seen = set()
for item in items:
if item not in seen:
yield item
seen.add(item)
a = [1, 5, 2, 1, 9, 1, 5, 10]
l = list(dedupe(a))
print(l)
def dedupe_not_hashable(items, key=None):
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield item
seen.add(val)
a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]
l = list(dedupe_not_hashable(a, key=lambda d: (d['x'], d['y'])))
print(l)
def section_11():
record = '....................100 .......513.25 ..........'
cost = int(record[20:23]) * float(record[31:37])
print(cost)
#?????????
SHARES = slice(20, 23)
PRICE = slice(31, 37)
cost = int(record[SHARES]) * float(record[PRICE])
print(cost)
items = [0, 1, 2, 3, 4, 5, 6]
a = slice(2, 4)
print(items[2:4])
print(items[a])
items[a] = [10,11]
print(items)
del items[a]
print(items)
#????start,stop?step????
a = slice(5, 50, 2)
print(a.start)
from collections import Counter
def section_12():
words = [
'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
'my', 'eyes', "you're", 'under'
]
word_counts = Counter(words)
top_three = word_counts.most_common(3)
print(top_three)
# Counter???????????
morewords = ['why','are','you','not','looking','in','my','eyes']
a = Counter(words)
b = Counter(morewords)
c = a + b
print(c)
d = a - b
print(d)
from operator import itemgetter
def section_13():
rows = [
{'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
rows_by_fname = sorted(rows, key=itemgetter('fname'))
rows_by_uid = sorted(rows, key=itemgetter('uid'))
rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
print(rows_by_fname)
print(rows_by_uid)
print(rows_by_lfname)
class User:
def __init__(self, user_id):
self.user_id = user_id
def __repr__(self):
return 'User({})'.format(self.user_id)
from operator import attrgetter
def section_14():
users = [User(23), User(3), User(99)]
print(users)
print(sorted(users, key=lambda u: u.user_id))
print(sorted(users, key=attrgetter('user_id')))
def main():
section_1()
section_11()
section_12()
section_13()
section_14()
Alavetően SQL, PL-SQL szelven kommunikál a töltő MAP fejlesztés és a hozzájuk kapcsolódó procedurákban, knowledge modul-oknál.
Hogyan is néz ez ki az ODI-ban?
Mi is a Jpython?
Javahoz javaban fedjlesztett python értelmezőről van szó. Lényegében egy JAR állomány, amelybe a 2.7.1 verziójú (hát nem a legfrissebb) python elhelyezkedik.
Használatakor a JAVA classpath-ba szerepeltetni kell a jpython jart.
set CLASSPATH=C:\path\to\my\app\myapp.jar;jython.jar;%CLASSPATH%
Hogyan néz ki egy egyszerű kalkulátor ebben:
Futtatás szintaktikája:
java -jar jython.jar {minta.py}
kl1.py tartalma:
# hello world
print("Hello world!")
# eljárás definició method
def add(a, b):
print("call add()")
return a + b
# eljárás meghívása
print(add(1, 2))
# két string összefüzése
print("abcdefghijklmnopqrstuvexyz" + '1234567890')
Futtatás CMD ablakban:
java -jar jython-standalone-2.7.1.jar kl1.py
2. Példa
kl3.py tartalma:
#coding=utf-8
def section_1():
p = (4, 5)
x, y = p
print(x)
print(y)
data = ['ACME', 50, 19.1, (2012, 12, 21)]
name, shares, price, date = data
print(name)
print(date)
name, shares, price, (year, mon, day) = data
print(year)
print(mon)
# ????????????
s = "Hello"
a,b,c,d,e = s
print(a)
print(e)
# ?????????????
_, shares, price, _ = data
print(shares)
print(price)
def section_2():
'''
# ??*????????
record = ('Dave', 'dave@example.com', '777-555-1123', '888-444-2342')
name, email, *phone_numbers = record
print(name)
print(phone_numbers)
def do_foo(x, y):
print('foo', x, y)
def do_bar(s):
print('bar', s)
records = [('foo', 1, 2), ('bar', 'hello'), ('foo', 3, 4)]
for tag, *args in records:
if tag == 'fooo':
do_foo(*args)
elif tag == 'bar':
do_bar(*args)
# ??_???????????
data = ('ACME', 50, 123.45, (12, 18, 2012))
name, *_, (*_, year) = data
print(name)
print(year)
'''
from collections import deque
def section_3():
def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
with open('/Users/liuqiang/code/Python/Python-cookbook/???:???????/somefile.txt') as f:
for line, prevlines in search(f, 'python', 5):
for pline in prevlines:
print(pline)
print(line)
print('-' * 20)
import heapq
def section_4():
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
portfolio = [
{'name': 'IBM', 'shares': 100, 'price': 91.1},
{'name': 'AAPL', 'shares': 50, 'price': 543.22},
{'name': 'FB', 'shares': 200, 'price': 21.09},
{'name': 'HPQ', 'shares': 35, 'price': 31.75},
{'name': 'YHOO', 'shares': 45, 'price': 16.35},
{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
print(cheap)
print(expensive)
from collections import defaultdict
def section_5():
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)
print(d)
d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)
print(d)
pairs = {'a' : [1, 2, 3], 'b' : [4, 5]}
d = {}
for key, value in pairs.items():
if key not in d:
d[key] = []
d[key].append(value)
print(d)
# ??defaultdict????key???????if????
d = defaultdict(list)
for key, value in pairs.items():
d[key].append(value)
print(d)
from collections import OrderedDict
import json
def section_7():
# OrderedDict????????????
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
for key in d:
print(key, d[key])
str = json.dumps(d)
print(str)
def section_8():
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# zip()????????(key,value)????
min_price = min(zip(prices.values(), prices.keys()))
print(min_price)
max_price = max(zip(prices.values(), prices.keys()))
print(max_price)
prices_sorted = sorted(zip(prices.values(), prices.keys()))
print(prices_sorted)
prices_and_names = zip(prices.values(), prices.keys())
print(min(prices_and_names))
# error:zip()??????????????????
# print(max(prices_and_names))
# ???????????
min_price_value = min(prices.values())
max_price_value = max(prices.values())
print(min_price_value)
print(max_price_value)
# ??????????key
min_price_key = min(prices, key=lambda k: prices[k])
max_price_key = max(prices, key=lambda k: prices[k])
print(min_price_key)
print(max_price_key)
def section_9():
a = {
'x' : 1,
'y' : 2,
'z' : 3,
}
b = {
'w' : 10,
'x' : 11,
'y' : 2
}
#dict?????????????
common_keys = a.keys() & b.keys()
different_keys = a.keys() - b.keys()
union_keys = a.keys() | b.keys()
common_keys_and_values = a.items() & b.items()
print(common_keys)
print(different_keys)
print(union_keys)
print(common_keys_and_values)
filter_dict = {key:a[key] for key in a.keys() - {'z', 'w'}}
print(filter_dict)
#??????
def section_10():
def dedupe(items):
seen = set()
for item in items:
if item not in seen:
yield item
seen.add(item)
a = [1, 5, 2, 1, 9, 1, 5, 10]
l = list(dedupe(a))
print(l)
def dedupe_not_hashable(items, key=None):
seen = set()
for item in items:
val = item if key is None else key(item)
if val not in seen:
yield item
seen.add(val)
a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]
l = list(dedupe_not_hashable(a, key=lambda d: (d['x'], d['y'])))
print(l)
def section_11():
record = '....................100 .......513.25 ..........'
cost = int(record[20:23]) * float(record[31:37])
print(cost)
#?????????
SHARES = slice(20, 23)
PRICE = slice(31, 37)
cost = int(record[SHARES]) * float(record[PRICE])
print(cost)
items = [0, 1, 2, 3, 4, 5, 6]
a = slice(2, 4)
print(items[2:4])
print(items[a])
items[a] = [10,11]
print(items)
del items[a]
print(items)
#????start,stop?step????
a = slice(5, 50, 2)
print(a.start)
from collections import Counter
def section_12():
words = [
'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around', 'the',
'eyes', "don't", 'look', 'around', 'the', 'eyes', 'look', 'into',
'my', 'eyes', "you're", 'under'
]
word_counts = Counter(words)
top_three = word_counts.most_common(3)
print(top_three)
# Counter???????????
morewords = ['why','are','you','not','looking','in','my','eyes']
a = Counter(words)
b = Counter(morewords)
c = a + b
print(c)
d = a - b
print(d)
from operator import itemgetter
def section_13():
rows = [
{'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
rows_by_fname = sorted(rows, key=itemgetter('fname'))
rows_by_uid = sorted(rows, key=itemgetter('uid'))
rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
print(rows_by_fname)
print(rows_by_uid)
print(rows_by_lfname)
class User:
def __init__(self, user_id):
self.user_id = user_id
def __repr__(self):
return 'User({})'.format(self.user_id)
from operator import attrgetter
def section_14():
users = [User(23), User(3), User(99)]
print(users)
print(sorted(users, key=lambda u: u.user_id))
print(sorted(users, key=attrgetter('user_id')))
def main():
section_1()
section_11()
section_12()
section_13()
section_14()
Futtatás CMD ablakban:
java -jar jython-standalone-2.7.1.jar kl3.py
from javax.swing import JFrame, JMenuBar, JMenu, JMenuItem, JTextField
from java.awt import BorderLayout
from javax.swing import JOptionPane
frame = JFrame("Dialog example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,300)
frame.setLayout(BorderLayout())
def OnClick(event):
str = event.getActionCommand()
if str == 'Message':
JOptionPane.showMessageDialog(frame,"this is a sample message dialog")
if str == "Input":
x = JOptionPane.showInputDialog(frame,"Enter your name")
txt.setText(x)
if str == "Confirm":
s = JOptionPane.showConfirmDialog (frame, "Do you want to continue?")
if s == JOptionPane.YES_OPTION:
txt.setText("YES")
if s == JOptionPane.NO_OPTION:
txt.setText("NO")
if s == JOptionPane.CANCEL_OPTION:
txt.setText("CANCEL")
bar = JMenuBar()
frame.setJMenuBar(bar)
file = JMenu("File")
msgbtn = JMenuItem("Message",actionPerformed = OnClick)
conbtn = JMenuItem("Confirm",actionPerformed = OnClick)
inputbtn = JMenuItem("Input",actionPerformed = OnClick)
file.add(msgbtn)
file.add(conbtn)
file.add(inputbtn)
bar.add(file)
txt = JTextField(10)
frame.add(txt, BorderLayout.SOUTH)
frame.setVisible(True)
Példa3:
from javax.swing import JFrame, JMenuBar, JMenu, JMenuItem, JTextField
from java.awt import BorderLayout
from javax.swing import JOptionPane
frame = JFrame("Dialog example")
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setLocation(100,100)
frame.setSize(400,300)
frame.setLayout(BorderLayout())
def OnClick(event):
str = event.getActionCommand()
if str == 'Message':
JOptionPane.showMessageDialog(frame,"this is a sample message dialog")
if str == "Input":
x = JOptionPane.showInputDialog(frame,"Enter your name")
txt.setText(x)
if str == "Confirm":
s = JOptionPane.showConfirmDialog (frame, "Do you want to continue?")
if s == JOptionPane.YES_OPTION:
txt.setText("YES")
if s == JOptionPane.NO_OPTION:
txt.setText("NO")
if s == JOptionPane.CANCEL_OPTION:
txt.setText("CANCEL")
bar = JMenuBar()
frame.setJMenuBar(bar)
file = JMenu("File")
msgbtn = JMenuItem("Message",actionPerformed = OnClick)
conbtn = JMenuItem("Confirm",actionPerformed = OnClick)
inputbtn = JMenuItem("Input",actionPerformed = OnClick)
file.add(msgbtn)
file.add(conbtn)
file.add(inputbtn)
bar.add(file)
txt = JTextField(10)
frame.add(txt, BorderLayout.SOUTH)
frame.setVisible(True)
Hogyan néz ki egy ODI-s JPyton hibaüzenet?
at org.python.core.Py.IndexError(Py.java:210)
at org.python.core.SequenceIndexDelegate.checkIdxAndGetItem(SequenceIndexDelegate.java:63)
at org.python.core.PySequence.seq___getitem__(PySequence.java:305)
at org.python.core.PySequence.__getitem__(PySequence.java:301)
at org.python.pycode._pyx0.f$0(<string>:42)
at org.python.pycode._pyx0.call_function(<string>)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1204)
at org.python.core.Py.exec(Py.java:1248)
at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:172)
at org.apache.bsf.engines.jython.JythonEngine.exec(JythonEngine.java:144)
at org.python.core.SequenceIndexDelegate.checkIdxAndGetItem(SequenceIndexDelegate.java:63)
at org.python.core.PySequence.seq___getitem__(PySequence.java:305)
at org.python.core.PySequence.__getitem__(PySequence.java:301)
at org.python.pycode._pyx0.f$0(<string>:42)
at org.python.pycode._pyx0.call_function(<string>)
at org.python.core.PyTableCode.call(PyTableCode.java:165)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1204)
at org.python.core.Py.exec(Py.java:1248)
at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:172)
at org.apache.bsf.engines.jython.JythonEngine.exec(JythonEngine.java:144)
KNIME-nek is van ilyene : link
További info linkek: jython.org
Megjegyzések
Megjegyzés küldése