Restaurants example¶
This example takes you through some of the basics of PyOS and introduces you to some of the commands, syntax and concepts. So let’s dive in, and enjoy!
[1]:
from pyos.pyos import *
Welcome to
____ ____
/ __ \/ __ /
____ __ __/ / / / /_
/ __ \/ / / / / / /\__ \
/ /_/ / /_/ / /_/ /___/ /
/ .___/\__, /\____//____/
/_/ /____/ v0.5.0
[2]:
pwd()
[2]:
Path('/martin/')
[3]:
ls()
[3]:
<empty>
Ok, so we’re in the martin
folder but there’s nothing in it. Let’s download some data and store it in dictionaries.
[4]:
import mincepy
import urllib.request
import json
ids = []
with urllib.request.urlopen('https://raw.githubusercontent.com/ozlerhakan/mongodb-json-files/master/datasets/restaurant.json') as url:
for line, _ in zip(url, range(399)):
data = json.loads(line.decode())
data.pop('_id')
ids.append(mincepy.Dict(data).save())
[5]:
ls()
[5]:
5e8e20ed1dbc98e7a84d9386 5e8e20ed1dbc98e7a84d9490 5e8e20ed1dbc98e7a84d959a
5e8e20ed1dbc98e7a84d9388 5e8e20ed1dbc98e7a84d9492 5e8e20ed1dbc98e7a84d959c
5e8e20ed1dbc98e7a84d938a 5e8e20ed1dbc98e7a84d9494 5e8e20ed1dbc98e7a84d959e
5e8e20ed1dbc98e7a84d938c 5e8e20ed1dbc98e7a84d9496 5e8e20ed1dbc98e7a84d95a0
5e8e20ed1dbc98e7a84d938e 5e8e20ed1dbc98e7a84d9498 5e8e20ed1dbc98e7a84d95a2
5e8e20ed1dbc98e7a84d9390 5e8e20ed1dbc98e7a84d949a 5e8e20ed1dbc98e7a84d95a4
5e8e20ed1dbc98e7a84d9392 5e8e20ed1dbc98e7a84d949c 5e8e20ed1dbc98e7a84d95a6
5e8e20ed1dbc98e7a84d9394 5e8e20ed1dbc98e7a84d949e 5e8e20ed1dbc98e7a84d95a8
5e8e20ed1dbc98e7a84d9396 5e8e20ed1dbc98e7a84d94a0 5e8e20ed1dbc98e7a84d95aa
5e8e20ed1dbc98e7a84d9398 5e8e20ed1dbc98e7a84d94a2 5e8e20ed1dbc98e7a84d95ac
5e8e20ed1dbc98e7a84d939a 5e8e20ed1dbc98e7a84d94a4 5e8e20ed1dbc98e7a84d95ae
5e8e20ed1dbc98e7a84d939c 5e8e20ed1dbc98e7a84d94a6 5e8e20ed1dbc98e7a84d95b0
5e8e20ed1dbc98e7a84d939e 5e8e20ed1dbc98e7a84d94a8 5e8e20ed1dbc98e7a84d95b2
5e8e20ed1dbc98e7a84d93a0 5e8e20ed1dbc98e7a84d94aa 5e8e20ed1dbc98e7a84d95b4
5e8e20ed1dbc98e7a84d93a2 5e8e20ed1dbc98e7a84d94ac 5e8e20ed1dbc98e7a84d95b6
5e8e20ed1dbc98e7a84d93a4 5e8e20ed1dbc98e7a84d94ae 5e8e20ed1dbc98e7a84d95b8
5e8e20ed1dbc98e7a84d93a6 5e8e20ed1dbc98e7a84d94b0 5e8e20ed1dbc98e7a84d95ba
5e8e20ed1dbc98e7a84d93a8 5e8e20ed1dbc98e7a84d94b2 5e8e20ed1dbc98e7a84d95bc
5e8e20ed1dbc98e7a84d93aa 5e8e20ed1dbc98e7a84d94b4 5e8e20ed1dbc98e7a84d95be
5e8e20ed1dbc98e7a84d93ac 5e8e20ed1dbc98e7a84d94b6 5e8e20ed1dbc98e7a84d95c0
5e8e20ed1dbc98e7a84d93ae 5e8e20ed1dbc98e7a84d94b8 5e8e20ed1dbc98e7a84d95c2
5e8e20ed1dbc98e7a84d93b0 5e8e20ed1dbc98e7a84d94ba 5e8e20ed1dbc98e7a84d95c4
5e8e20ed1dbc98e7a84d93b2 5e8e20ed1dbc98e7a84d94bc 5e8e20ed1dbc98e7a84d95c6
5e8e20ed1dbc98e7a84d93b4 5e8e20ed1dbc98e7a84d94be 5e8e20ed1dbc98e7a84d95c8
5e8e20ed1dbc98e7a84d93b6 5e8e20ed1dbc98e7a84d94c0 5e8e20ed1dbc98e7a84d95ca
5e8e20ed1dbc98e7a84d93b8 5e8e20ed1dbc98e7a84d94c2 5e8e20ed1dbc98e7a84d95cc
5e8e20ed1dbc98e7a84d93ba 5e8e20ed1dbc98e7a84d94c4 5e8e20ed1dbc98e7a84d95ce
5e8e20ed1dbc98e7a84d93bc 5e8e20ed1dbc98e7a84d94c6 5e8e20ed1dbc98e7a84d95d0
5e8e20ed1dbc98e7a84d93be 5e8e20ed1dbc98e7a84d94c8 5e8e20ed1dbc98e7a84d95d2
5e8e20ed1dbc98e7a84d93c0 5e8e20ed1dbc98e7a84d94ca 5e8e20ed1dbc98e7a84d95d4
5e8e20ed1dbc98e7a84d93c2 5e8e20ed1dbc98e7a84d94cc 5e8e20ed1dbc98e7a84d95d6
5e8e20ed1dbc98e7a84d93c4 5e8e20ed1dbc98e7a84d94ce 5e8e20ed1dbc98e7a84d95d8
5e8e20ed1dbc98e7a84d93c6 5e8e20ed1dbc98e7a84d94d0 5e8e20ed1dbc98e7a84d95da
5e8e20ed1dbc98e7a84d93c8 5e8e20ed1dbc98e7a84d94d2 5e8e20ed1dbc98e7a84d95dc
5e8e20ed1dbc98e7a84d93ca 5e8e20ed1dbc98e7a84d94d4 5e8e20ed1dbc98e7a84d95de
5e8e20ed1dbc98e7a84d93cc 5e8e20ed1dbc98e7a84d94d6 5e8e20ed1dbc98e7a84d95e0
5e8e20ed1dbc98e7a84d93ce 5e8e20ed1dbc98e7a84d94d8 5e8e20ed1dbc98e7a84d95e2
5e8e20ed1dbc98e7a84d93d0 5e8e20ed1dbc98e7a84d94da 5e8e20ed1dbc98e7a84d95e4
5e8e20ed1dbc98e7a84d93d2 5e8e20ed1dbc98e7a84d94dc 5e8e20ed1dbc98e7a84d95e6
5e8e20ed1dbc98e7a84d93d4 5e8e20ed1dbc98e7a84d94de 5e8e20ed1dbc98e7a84d95e8
5e8e20ed1dbc98e7a84d93d6 5e8e20ed1dbc98e7a84d94e0 5e8e20ed1dbc98e7a84d95ea
5e8e20ed1dbc98e7a84d93d8 5e8e20ed1dbc98e7a84d94e2 5e8e20ed1dbc98e7a84d95ec
5e8e20ed1dbc98e7a84d93da 5e8e20ed1dbc98e7a84d94e4 5e8e20ed1dbc98e7a84d95ee
5e8e20ed1dbc98e7a84d93dc 5e8e20ed1dbc98e7a84d94e6 5e8e20ed1dbc98e7a84d95f0
5e8e20ed1dbc98e7a84d93de 5e8e20ed1dbc98e7a84d94e8 5e8e20ed1dbc98e7a84d95f2
5e8e20ed1dbc98e7a84d93e0 5e8e20ed1dbc98e7a84d94ea 5e8e20ed1dbc98e7a84d95f4
5e8e20ed1dbc98e7a84d93e2 5e8e20ed1dbc98e7a84d94ec 5e8e20ed1dbc98e7a84d95f6
5e8e20ed1dbc98e7a84d93e4 5e8e20ed1dbc98e7a84d94ee 5e8e20ed1dbc98e7a84d95f8
5e8e20ed1dbc98e7a84d93e6 5e8e20ed1dbc98e7a84d94f0 5e8e20ed1dbc98e7a84d95fa
5e8e20ed1dbc98e7a84d93e8 5e8e20ed1dbc98e7a84d94f2 5e8e20ed1dbc98e7a84d95fc
5e8e20ed1dbc98e7a84d93ea 5e8e20ed1dbc98e7a84d94f4 5e8e20ed1dbc98e7a84d95fe
5e8e20ed1dbc98e7a84d93ec 5e8e20ed1dbc98e7a84d94f6 5e8e20ed1dbc98e7a84d9600
5e8e20ed1dbc98e7a84d93ee 5e8e20ed1dbc98e7a84d94f8 5e8e20ed1dbc98e7a84d9602
5e8e20ed1dbc98e7a84d93f0 5e8e20ed1dbc98e7a84d94fa 5e8e20ed1dbc98e7a84d9604
5e8e20ed1dbc98e7a84d93f2 5e8e20ed1dbc98e7a84d94fc 5e8e20ed1dbc98e7a84d9606
5e8e20ed1dbc98e7a84d93f4 5e8e20ed1dbc98e7a84d94fe 5e8e20ed1dbc98e7a84d9608
5e8e20ed1dbc98e7a84d93f6 5e8e20ed1dbc98e7a84d9500 5e8e20ed1dbc98e7a84d960a
5e8e20ed1dbc98e7a84d93f8 5e8e20ed1dbc98e7a84d9502 5e8e20ed1dbc98e7a84d960c
5e8e20ed1dbc98e7a84d93fa 5e8e20ed1dbc98e7a84d9504 5e8e20ed1dbc98e7a84d960e
5e8e20ed1dbc98e7a84d93fc 5e8e20ed1dbc98e7a84d9506 5e8e20ed1dbc98e7a84d9610
5e8e20ed1dbc98e7a84d93fe 5e8e20ed1dbc98e7a84d9508 5e8e20ed1dbc98e7a84d9612
5e8e20ed1dbc98e7a84d9400 5e8e20ed1dbc98e7a84d950a 5e8e20ed1dbc98e7a84d9614
5e8e20ed1dbc98e7a84d9402 5e8e20ed1dbc98e7a84d950c 5e8e20ed1dbc98e7a84d9616
5e8e20ed1dbc98e7a84d9404 5e8e20ed1dbc98e7a84d950e 5e8e20ed1dbc98e7a84d9618
5e8e20ed1dbc98e7a84d9406 5e8e20ed1dbc98e7a84d9510 5e8e20ed1dbc98e7a84d961a
5e8e20ed1dbc98e7a84d9408 5e8e20ed1dbc98e7a84d9512 5e8e20ed1dbc98e7a84d961c
5e8e20ed1dbc98e7a84d940a 5e8e20ed1dbc98e7a84d9514 5e8e20ed1dbc98e7a84d961e
5e8e20ed1dbc98e7a84d940c 5e8e20ed1dbc98e7a84d9516 5e8e20ed1dbc98e7a84d9620
5e8e20ed1dbc98e7a84d940e 5e8e20ed1dbc98e7a84d9518 5e8e20ed1dbc98e7a84d9622
5e8e20ed1dbc98e7a84d9410 5e8e20ed1dbc98e7a84d951a 5e8e20ed1dbc98e7a84d9624
5e8e20ed1dbc98e7a84d9412 5e8e20ed1dbc98e7a84d951c 5e8e20ed1dbc98e7a84d9626
5e8e20ed1dbc98e7a84d9414 5e8e20ed1dbc98e7a84d951e 5e8e20ed1dbc98e7a84d9628
5e8e20ed1dbc98e7a84d9416 5e8e20ed1dbc98e7a84d9520 5e8e20ed1dbc98e7a84d962a
5e8e20ed1dbc98e7a84d9418 5e8e20ed1dbc98e7a84d9522 5e8e20ed1dbc98e7a84d962c
5e8e20ed1dbc98e7a84d941a 5e8e20ed1dbc98e7a84d9524 5e8e20ed1dbc98e7a84d962e
5e8e20ed1dbc98e7a84d941c 5e8e20ed1dbc98e7a84d9526 5e8e20ed1dbc98e7a84d9630
5e8e20ed1dbc98e7a84d941e 5e8e20ed1dbc98e7a84d9528 5e8e20ed1dbc98e7a84d9632
5e8e20ed1dbc98e7a84d9420 5e8e20ed1dbc98e7a84d952a 5e8e20ed1dbc98e7a84d9634
5e8e20ed1dbc98e7a84d9422 5e8e20ed1dbc98e7a84d952c 5e8e20ed1dbc98e7a84d9636
5e8e20ed1dbc98e7a84d9424 5e8e20ed1dbc98e7a84d952e 5e8e20ed1dbc98e7a84d9638
5e8e20ed1dbc98e7a84d9426 5e8e20ed1dbc98e7a84d9530 5e8e20ed1dbc98e7a84d963a
5e8e20ed1dbc98e7a84d9428 5e8e20ed1dbc98e7a84d9532 5e8e20ed1dbc98e7a84d963c
5e8e20ed1dbc98e7a84d942a 5e8e20ed1dbc98e7a84d9534 5e8e20ed1dbc98e7a84d963e
5e8e20ed1dbc98e7a84d942c 5e8e20ed1dbc98e7a84d9536 5e8e20ed1dbc98e7a84d9640
5e8e20ed1dbc98e7a84d942e 5e8e20ed1dbc98e7a84d9538 5e8e20ed1dbc98e7a84d9642
5e8e20ed1dbc98e7a84d9430 5e8e20ed1dbc98e7a84d953a 5e8e20ed1dbc98e7a84d9644
5e8e20ed1dbc98e7a84d9432 5e8e20ed1dbc98e7a84d953c 5e8e20ed1dbc98e7a84d9646
5e8e20ed1dbc98e7a84d9434 5e8e20ed1dbc98e7a84d953e 5e8e20ed1dbc98e7a84d9648
5e8e20ed1dbc98e7a84d9436 5e8e20ed1dbc98e7a84d9540 5e8e20ed1dbc98e7a84d964a
5e8e20ed1dbc98e7a84d9438 5e8e20ed1dbc98e7a84d9542 5e8e20ed1dbc98e7a84d964c
5e8e20ed1dbc98e7a84d943a 5e8e20ed1dbc98e7a84d9544 5e8e20ed1dbc98e7a84d964e
5e8e20ed1dbc98e7a84d943c 5e8e20ed1dbc98e7a84d9546 5e8e20ed1dbc98e7a84d9650
5e8e20ed1dbc98e7a84d943e 5e8e20ed1dbc98e7a84d9548 5e8e20ed1dbc98e7a84d9652
5e8e20ed1dbc98e7a84d9440 5e8e20ed1dbc98e7a84d954a 5e8e20ed1dbc98e7a84d9654
5e8e20ed1dbc98e7a84d9442 5e8e20ed1dbc98e7a84d954c 5e8e20ed1dbc98e7a84d9656
5e8e20ed1dbc98e7a84d9444 5e8e20ed1dbc98e7a84d954e 5e8e20ed1dbc98e7a84d9658
5e8e20ed1dbc98e7a84d9446 5e8e20ed1dbc98e7a84d9550 5e8e20ed1dbc98e7a84d965a
5e8e20ed1dbc98e7a84d9448 5e8e20ed1dbc98e7a84d9552 5e8e20ed1dbc98e7a84d965c
5e8e20ed1dbc98e7a84d944a 5e8e20ed1dbc98e7a84d9554 5e8e20ed1dbc98e7a84d965e
5e8e20ed1dbc98e7a84d944c 5e8e20ed1dbc98e7a84d9556 5e8e20ed1dbc98e7a84d9660
5e8e20ed1dbc98e7a84d944e 5e8e20ed1dbc98e7a84d9558 5e8e20ed1dbc98e7a84d9662
5e8e20ed1dbc98e7a84d9450 5e8e20ed1dbc98e7a84d955a 5e8e20ed1dbc98e7a84d9664
5e8e20ed1dbc98e7a84d9452 5e8e20ed1dbc98e7a84d955c 5e8e20ed1dbc98e7a84d9666
5e8e20ed1dbc98e7a84d9454 5e8e20ed1dbc98e7a84d955e 5e8e20ed1dbc98e7a84d9668
5e8e20ed1dbc98e7a84d9456 5e8e20ed1dbc98e7a84d9560 5e8e20ed1dbc98e7a84d966a
5e8e20ed1dbc98e7a84d9458 5e8e20ed1dbc98e7a84d9562 5e8e20ed1dbc98e7a84d966c
5e8e20ed1dbc98e7a84d945a 5e8e20ed1dbc98e7a84d9564 5e8e20ed1dbc98e7a84d966e
5e8e20ed1dbc98e7a84d945c 5e8e20ed1dbc98e7a84d9566 5e8e20ed1dbc98e7a84d9670
5e8e20ed1dbc98e7a84d945e 5e8e20ed1dbc98e7a84d9568 5e8e20ed1dbc98e7a84d9672
5e8e20ed1dbc98e7a84d9460 5e8e20ed1dbc98e7a84d956a 5e8e20ed1dbc98e7a84d9674
5e8e20ed1dbc98e7a84d9462 5e8e20ed1dbc98e7a84d956c 5e8e20ed1dbc98e7a84d9676
5e8e20ed1dbc98e7a84d9464 5e8e20ed1dbc98e7a84d956e 5e8e20ed1dbc98e7a84d9678
5e8e20ed1dbc98e7a84d9466 5e8e20ed1dbc98e7a84d9570 5e8e20ed1dbc98e7a84d967a
5e8e20ed1dbc98e7a84d9468 5e8e20ed1dbc98e7a84d9572 5e8e20ed1dbc98e7a84d967c
5e8e20ed1dbc98e7a84d946a 5e8e20ed1dbc98e7a84d9574 5e8e20ed1dbc98e7a84d967e
5e8e20ed1dbc98e7a84d946c 5e8e20ed1dbc98e7a84d9576 5e8e20ed1dbc98e7a84d9680
5e8e20ed1dbc98e7a84d946e 5e8e20ed1dbc98e7a84d9578 5e8e20ed1dbc98e7a84d9682
5e8e20ed1dbc98e7a84d9470 5e8e20ed1dbc98e7a84d957a 5e8e20ed1dbc98e7a84d9684
5e8e20ed1dbc98e7a84d9472 5e8e20ed1dbc98e7a84d957c 5e8e20ed1dbc98e7a84d9686
5e8e20ed1dbc98e7a84d9474 5e8e20ed1dbc98e7a84d957e 5e8e20ed1dbc98e7a84d9688
5e8e20ed1dbc98e7a84d9476 5e8e20ed1dbc98e7a84d9580 5e8e20ed1dbc98e7a84d968a
5e8e20ed1dbc98e7a84d9478 5e8e20ed1dbc98e7a84d9582 5e8e20ed1dbc98e7a84d968c
5e8e20ed1dbc98e7a84d947a 5e8e20ed1dbc98e7a84d9584 5e8e20ed1dbc98e7a84d968e
5e8e20ed1dbc98e7a84d947c 5e8e20ed1dbc98e7a84d9586 5e8e20ed1dbc98e7a84d9690
5e8e20ed1dbc98e7a84d947e 5e8e20ed1dbc98e7a84d9588 5e8e20ed1dbc98e7a84d9692
5e8e20ed1dbc98e7a84d9480 5e8e20ed1dbc98e7a84d958a 5e8e20ed1dbc98e7a84d9694
5e8e20ed1dbc98e7a84d9482 5e8e20ed1dbc98e7a84d958c 5e8e20ed1dbc98e7a84d9696
5e8e20ed1dbc98e7a84d9484 5e8e20ed1dbc98e7a84d958e 5e8e20ed1dbc98e7a84d9698
5e8e20ed1dbc98e7a84d9486 5e8e20ed1dbc98e7a84d9590 5e8e20ed1dbc98e7a84d969a
5e8e20ed1dbc98e7a84d9488 5e8e20ed1dbc98e7a84d9592 5e8e20ed1dbc98e7a84d969c
5e8e20ed1dbc98e7a84d948a 5e8e20ed1dbc98e7a84d9594 5e8e20ed1dbc98e7a84d969e
5e8e20ed1dbc98e7a84d948c 5e8e20ed1dbc98e7a84d9596 5e8e20ed1dbc98e7a84d96a0
5e8e20ed1dbc98e7a84d948e 5e8e20ed1dbc98e7a84d9598 5e8e20ed1dbc98e7a84d96a2
So what have we got? Let’s cat
a couple of our dictionaries to see:
[6]:
cat(ids[0], ids[1])
[6]:
┌──────────────┬─────────────────────────────────────────────────────────────┐
│URL │http://www.just-eat.co.uk/restaurants-cn-chinese-cardiff/menu│
│address │228 City Road │
│address line 2│Cardiff │
│name │.CN Chinese │
│outcode │CF24 │
│postcode │3JH │
│rating │5 │
│type_of_food │Chinese │
└──────────────┴─────────────────────────────────────────────────────────────┘
┌──────────────┬─────────────────────────────────────────────────────┐
│URL │http://www.just-eat.co.uk/restaurants-atthai-ss9/menu│
│address │376 Rayleigh Road │
│address line 2│Essex │
│name │@ Thai │
│outcode │SS9 │
│postcode │5PT │
│rating │5.5 │
│type_of_food │Thai │
└──────────────┴─────────────────────────────────────────────────────┘
Wait a minute. What’s with all the boxes?
Pretty, isn’t it? That’s just the default way PyOS prints your objects, you can see that they’re really just dicts by using:
[7]:
cat(ids[0], ids[1], representer=str)
[7]:
{'URL': 'http://www.just-eat.co.uk/restaurants-cn-chinese-cardiff/menu', 'address': '228 City Road', 'address line 2': 'Cardiff', 'name': '.CN Chinese', 'outcode': 'CF24', 'postcode': '3JH', 'rating': 5, 'type_of_food': 'Chinese'}
{'URL': 'http://www.just-eat.co.uk/restaurants-atthai-ss9/menu', 'address': '376 Rayleigh Road', 'address line 2': 'Essex', 'name': '@ Thai', 'outcode': 'SS9', 'postcode': '5PT', 'rating': 5.5, 'type_of_food': 'Thai'}
Now let’s give them meaningful names, converting spaces and forward slashes
[8]:
for resto in ls | load:
mv(resto, resto['name'].replace(' ', '_').replace('/', '_'))
ls()
[8]:
.CN_Chinese Aberdare_Charcoal_Grill
@_Thai Aberdeen_Shanghai_Takeaway
@_Thai_Restaurant Aberkenfig_Kebab_&_Pizza_House
@Indian.com Abe's_Pizza
007_Takeaway Abi_Restaurant
042_Restaurant_&_Bar Abi_Ruchi
1_2_3_Chinese Abida
100_Degrees_Chinese_Restaurant Abidap_Connection
100_Menu Abid's_Tandoori_Takeaway
104_Turkish_BBQ Abington_Tandoori
109_Ristorante Abi's_Kebab
113_Fish_Bar Abo_Ali_-_Lebanese_Cuisine
133_Takeaway Abra_Pizzas
1498_The_Spice_Affair Abra-Kebab-Ra
168_Chinese_&_Cantonese_Takeaway ABS_Fast_Food
1A_Wok Abs_Fried_Chicken_&_Pizza
1pizza1 Abshar_Indian_Cuisine
1st_Choice_Pizza Abshar_Persian_Cuisine
1st_Class_Pizza Absolute_Caribbean
1st_Class_Pizza_&_Kebab_House Aby's_Indian_Experience
2_4_1_Pizza Abyssinia_Ethiopian_Restaurant
2_for_1_Pizza_Place Abz_BBQ_Kitchen
2_Spice Ace_Of_Spice
2_Treat_U Ace_Peri_Peri
23rd_Street_Pizza Ace_Pizza
241_Pizza ACE_Pizza_&_Kebab
2-4-1_Pizza Ace_Plaice_Traditional_Fish_&_Chips
280_Degrees_African_&_Nigerian_Restaurant Acha_Halal_Chinese_Cuisine
3_Chef_Fish_Bar Ackee_Tree
3_Chefs Ackie's
3_In_1_Dunoon Acomb_Kebab_House
3_in_1_Indian_&_Chipshop_Barrhead Acropolis
3_In_1_Xtra Active_Cafe_Lounge
321_Pizzas,_Kebabs_&_Burgers Acton_Charcoal_Grill
328_Chinese_Online Ada_Restaurant
333_Chinese_Takeaway Adaab_Balti
333_Chinese_Takeaway1 Adams
350_Wok Adams_&_Lily's
4_in_1_Express Adams_Alsabti_Pizzeria_&_Grill_House
4_in_Love Adams_Balti
4500_Miles_From_Delhi Adam's_Balti_&_Pizza
4_Seasons_Pizza_&_Grill Adam's_Cafe_-_Collection_Only
4550_Miles_From_Delhi_-_Collection_Only Adam's_Grill
5_In_1_Takeaway Adams_Chippy_&_Curry_House
5_'N'_1 Adams_Diner
5_Star_Chinese Adam's_Diner
5_Star_Falafel_@_GH_Butchers Adam's_Fast_Food
5_Star_Fish_Bar Adam's_Fish_&_Chips
5_Star_Pizza Adams_Fish_&_Pizza_Bar
555_Hot_Curry Adams_Fish_N_Pizza_Bar
555_Pizza Adam's_Hot_&_Spicy
555_Pizza_&_Kebab Adams_Ice_Cream_Parlour
57_Orient_Takeaway Adams_Pizza
62_Worksop_Fish_Bar Adam's_Pizza_&_Kebab
64_Pizzeria Adams_Pizza_&_Kebabs
7_&_One Adams_Pizza_Corner
7_Oaks_Grill Adam's_Pizzeria
7_Spices Adams_Pizzeria
7_Spices_Takeaway Adams_Place
7_STAR_Pizza Adam's_Spice
7_Star_Spices Adams_Steak_&_Curry_House
700_Degrees Adana_Pizza
88_Chinese Adar_Restaurant
88_Noodle_Bar Add_Spice
888_Chinese_Takeaway Addlestone_Charcoal_Grill
888_Triple_Eight Adeel_Tandoori
9_Inch_CFC Adeels_Fast_Food
9th_Avenue_Pizzeria Adeel_Balti_&_Pizza_Bar
9th_Kitchen Adeels_Spice
A_&_G_Kitchen Adelaide_Fish_Bar_-_Collection_Only
A_&_T_Mundi_House Adel's_Pizza
A_Cake_A_Shake Adil_Takeaway
A_Fish_Called_Rhondda Adil's_Takeaway
A_La_Pizza Adiva
A_La_Turka Adlington_Mama_Mia
A_M_Mians Adlington_Spice
A_Matter_Of_Taste Admiral_Pizza
A_One_Tandoori Admirals_Fish_&_Chips_&_Kebabs
A_Passage_To_India Adnan_Southern_Fried_Chicken_Shop
A_Sealand_Fish_Bar_-_Collection_Only Adnans_Indian_Restaurant_&_Takeaway
A_Star_Chippy Adolfo's
A_Taskinha Adonis_Pizza_&_Grill
A_Taste_Of_Persia_-_Collection_Only Ado's
A_To_Buy_Fish_&_Chips Adras_Restaurant
A_Touch_of_Spice Adriatic_Italian
A_World_Of_Fl@vours AF88
A_Yummy_Pizza Afandina_Restaurant
A&A_Peri_Peri AFC
A&S_Fast_Food AFC_American_Fried_Chicken
A.J's_Pizza AFC_Fried_Chicken_&_Pizza
èkó_Food_Market AFC_Pizza
£1_Fish_Shop AFC-American_Fried_Chicken
A1_Balti_House Afendi_Club_&_Restaurant
A1_Pizzas Afendi_Restaurant_&_Cafe
A1_Rice_'N'_Spice Afghan_Kebab_Takeaway
A1_Wok Afghan_Pamir
A12_Spice Afghan_Restaurant
A4_Pizza_&_Kebab Afghan_Spice
AA_Charcoal_Grill Africa_9JA_Restaurant
Aachi_Chettinad Africa_Best_Place
Aadams_Authentic_Grill African_Flavour
Aakash_Balti Afritopia_-_African_Restaurant_with_Style
Aakash_Restaurant Afsana
Aamaya After_Taste
Aamino's_Pizza Afters_Original
Aanias_Takeaway Agoon_Pani_Restaurant_&_Takeaway
AAQA_Fast_Food Agra
Aaris_Indian_Restaurant Agra_Indian_Restaurant_&_Takeaway
Aarthi Agra_Spice_World
A6_Grill Agra_Tandoori
Aashiana Agra_Tandoori_&_Balti
Aashir's Agra_Tandoori_Express
Aayan's Agrabad
AB_Pizza_and_Grill Ahads_Bengal_Balti
Ababil Ahjee_Bhajee
Abaseen Ahmed_Indian_Takeaway
Abbey_Fish_Bar Ahmed_Tandoori
Abbey_Fryers_Fish_Bar_&_Balti_House Ahmed's
Abbey_Meads_Indian_Restaurant_&_Takeaway Ahmeds_Curry_Cafe
Abbey_Spice Ahmeds_Masala_Cafe
Abbey_Tandoori Ahmed's_Perfect_Fried_Chicken
Abbeyfry_Fish_and_Chips Ahmeds_Tandoori
Abbeyfry_Pizzeria_&_Kebab_House Ai_Sushi
Abbey's_Balti_Village Ai_Wok
Abbey's_Fish_&_Chips_&_Pizza_Place Aimees
Abbeys_Junction_Pizzeria Airlink_Restaurant_-_Collection_Only
Abbey's_Pizza Aishah_Tandoori
Abbeywood_Tandoori Aisha's
Abbies_Pizza AJ_Pizza_Town_Limited
Abby's_Diner AJ_Takeaway
Abdul_Hadi Ajanta_Indian_Cuisine
Abdul_Spice Ajantha_Takeaway
Abduls Aji_-_Collection_Only
Abdul's AJ's_Chicken
Abdul's_Balti_House Aisuru_Sushi
Abdul's_Curry_House AJs_Multi_Cuisine
Abdul's_Indian AJ's_Pizza
Abdul's_Indian_Cuisine AJ's_Traditional_Fish_&_Chips
Abduls_Kebab_House Ajuba_Indian_Cuisine
Abduls_Rusholme Ajwa_Restaurant
Aberavon_Packed_Meals AK_Chicken_Food
Aberbargoed_Indian_Takeaway AK_Grill
The search functionality¶
In the mood for curry in Edinburgh?
[9]:
cat(find(state={'type_of_food': 'Curry', 'address line 2': 'Edinburgh'}))
[9]:
┌──────────────┬──────────────────────────────────────────────────────┐
│URL │http://www.just-eat.co.uk/restaurants-abduls-eh10/menu│
│address │22 Comiston Road │
│address line 2│Edinburgh │
│name │Abduls │
│outcode │EH10 │
│postcode │5QE │
│rating │5 │
│type_of_food │Curry │
└──────────────┴──────────────────────────────────────────────────────┘
┌──────────────┬───────────────────────────────────────────────────────────┐
│URL │http://www.just-eat.co.uk/restaurants-abida-restaurant/menu│
│address │295A St John's Road │
│address line 2│Edinburgh │
│name │Abida │
│outcode │EH12 │
│postcode │7XF │
│rating │4.5 │
│type_of_food │Curry │
└──────────────┴───────────────────────────────────────────────────────────┘
┌──────────────┬─────────────────────────────────────────────────────────────┐
│URL │http://www.just-eat.co.uk/restaurants-ahmedstandoori-eh6/menu│
│address │100 Newhaven Road │
│address line 2│Edinburgh │
│name │Ahmeds Tandoori │
│outcode │EH6 │
│postcode │4BS │
│rating │5 │
│type_of_food │Curry │
└──────────────┴─────────────────────────────────────────────────────────────┘
┌──────────────┬────────────────────────────────────────────────────────┐
│URL │http://www.just-eat.co.uk/restaurants-agoonpani-eh6/menu│
│address │91 Henderson Street │
│address line 2│Edinburgh │
│name │Agoon Pani Restaurant & Takeaway │
│outcode │EH6 │
│postcode │6ED │
│rating │5 │
│type_of_food │Curry │
└──────────────┴────────────────────────────────────────────────────────┘
Let’s organise our resto’s a little more into folders
[10]:
for resto in ls | load:
mv(resto, resto['type_of_food'] + '/') # All directories in PyOS end with a '/'
ls()
[10]:
Chinese/ African/ Fish & Chips/ Arabic/ Persian/ Caribbean/ Russian/ Burgers/
Thai/ Turkish/ English/ Desserts/ Peri Peri/ Ethiopian/ Afghan/ Sushi/
Curry/ Breakfast/ Lebanese/ Kebab/ South Curry/ Greek/ Cakes/ Grill/
Pizza/ American/ Chicken/ Portuguese/ Punjabi/ Moroccan/ Japanese/
Beautiful, let’s just check:
[11]:
ls('Pizza/')
[11]:
007_Takeaway 9th_Avenue_Pizzeria Adams_Alsabti_Pizzeria_&_Grill_House
109_Ristorante A_La_Pizza Adam's_Cafe_-_Collection_Only
1pizza1 A_La_Turka Adam's_Diner
1st_Choice_Pizza A_Matter_Of_Taste Adam's_Fast_Food
1st_Class_Pizza A_Yummy_Pizza Adam's_Hot_&_Spicy
1st_Class_Pizza_&_Kebab_House A.J's_Pizza Adams_Pizza
2_4_1_Pizza A1_Pizzas Adam's_Pizza_&_Kebab
2_for_1_Pizza_Place A4_Pizza_&_Kebab Adams_Pizza_&_Kebabs
2_Treat_U Aamino's_Pizza Adams_Pizza_Corner
241_Pizza AAQA_Fast_Food Adam's_Pizzeria
2-4-1_Pizza Abbeyfry_Pizzeria_&_Kebab_House Adams_Pizzeria
321_Pizzas,_Kebabs_&_Burgers Abbeys_Junction_Pizzeria Adana_Pizza
4_in_1_Express Abduls_Kebab_House Adeels_Spice
4_Seasons_Pizza_&_Grill Aberdare_Charcoal_Grill Adel's_Pizza
5_Star_Pizza Abe's_Pizza Admiral_Pizza
555_Pizza Abra_Pizzas Adnan_Southern_Fried_Chicken_Shop
555_Pizza_&_Kebab ABS_Fast_Food Adriatic_Italian
64_Pizzeria Ace_Pizza AFC_Pizza
7_STAR_Pizza ACE_Pizza_&_Kebab Afendi_Club_&_Restaurant
7_Star_Spices Adams AJ's_Pizza
9_Inch_CFC Adams_&_Lily's AJ's_Traditional_Fish_&_Chips
You know what, I’m vegetarian anyway - let’s delete the chicken joints
[12]:
rm('Chicken/')
rm: cannot remove 'Chicken/': Is a directory
Whoops, I forgot the -r
[13]:
rm -r ('Chicken/')
ls()
[13]:
Chinese/ African/ Fish & Chips/ Desserts/ Peri Peri/ Ethiopian/ Afghan/ Sushi/
Thai/ Turkish/ English/ Kebab/ South Curry/ Greek/ Cakes/ Grill/
Curry/ Breakfast/ Lebanese/ Portuguese/ Punjabi/ Moroccan/ Japanese/
Pizza/ American/ Arabic/ Persian/ Caribbean/ Russian/ Burgers/
Using metadata¶
Let’s add my personal ratings as metadata
[14]:
meta -u ('Curry/Ahmeds_Tandoori', martins_rating=5.5) # -u for 'update'
meta -u ('Curry/Abida', martins_rating=6)
meta -u ('Curry/Abduls', martins_rating=4)
# Let's have a look
meta('Curry/Ahmeds_Tandoori')
[14]:
┌──────────────┬────────────────────────┐
│_directory │/martin/Curry/ │
│obj_id │5e8e20ed1dbc98e7a84d9660│
│name │Ahmeds_Tandoori │
│martins_rating│5.5 │
└──────────────┴────────────────────────┘
And now let’s find the good ones
[15]:
find(meta=dict(martins_rating=queries.gt(5)))
[15]:
Ahmeds_Tandoori
Abida
You can also ‘pipe’ results to another callable:
[16]:
find(meta=dict(martins_rating=queries.gt(5))) | len
[16]:
2