---
# System prepended metadata

title: Python

---

# Python

## url
https://bitbucket.org/

https://jsfiddle.net/
https://ideone.com/
https://www.codeground.org/
http://pythonfiddle.com/
https://www.tutorialspoint.com/
https://replit.com/

https://www.heroku.com/
https://www.pythonanywhere.com/
https://www.digitalocean.com/
https://www.linode.com/

https://ngrok.com/

https://jsonformatter.curiousconcept.com/

https://firebase.google.com/


## main

```python=
if __name__ == '__main__':
    start_time = time.perf_counter()

    main()

    end_time = time.perf_counter()
    print(f'[Finished in {(end_time - start_time):.1f}s]')
```

## today

```python=
    today = datetime.date.today()
    print('today:', today)
    # today: 2021-10-12

    today = datetime.datetime.today()
    print('today:', today)
    # today: 2021-10-12 21:59:05.578499

    print('today:', datetime.date.today().isocalendar())
    # today: datetime.IsoCalendarDate(year=2021, week=41, weekday=2)

    today = datetime.date(today.year, today.month, today.day)
    print('today:', today)
    # today: 2021-10-12
```

## disk

```python=
    total, used, free = shutil.disk_usage('/')
    print('total:', total / (2**30))
    print('used:', used / (2**30))
    print('free:', free / (2**30))

    log_files = glob.glob('C:\Windows\*.log')
    print('log_files:', log_files)

    for f in log_files:
        print(os.stat(f).st_size)
        print(os.path.getsize(f))

    from pathlib import Path
        print(Path(f).stat().st_size) # better

    for dirname, subdir, files in os.walk('C:\Windows')
        print(dirname)
        print(subdir)
        print(files)

    for f in p.glob('**/*.*'):
        print(f.name)

    from pathlib import Path
    for x in Path('/tmp').iterdir():
        print(type(x), x)
```

## type

```python=
list: a = ['A', 'B', 'C']
tuple: b = ('A', 'B', 'C')
dict: c = {'A':1, 'B':2, 'C':3}
set: d = {'A', 'B', 'C'}
```

## build-in functions
https://docs.python.org/3/library/functions.html

![](https://i.imgur.com/n5zovIG.png)

## file
```python=
with open('filename', 'r') as fp:
    fp.readlines()
with open('file.json', 'r') as fp:
    xxx = json.load(fp)
```

## db
```python=
    dirname = os.path.dirname(os.path.abspath(__file__))
    print(dirname)

    con = sqlite3.connect(os.path.join(dirname, 'MySQLite.db'))
    cur = con.cursor()
    cur.execute('select * from scores')
    rows = cur.fetchall()
    for row in rows:
        print(row[0], row[1], row[2])
    con.close()

    # efficient way
    import sqlite3

    con = sqlite3.connect(":memory:")
    con.execute("create table lang (id integer primary key, name varchar unique)")

    # Successful, con.commit() is called automatically afterwards
    with con:
        con.execute("insert into lang(name) values (?)", ("Python",))

    # con.rollback() is called after the with block finishes with an exception, the
    # exception is still raised and must be caught
    try:
        with con:
            con.execute("insert into lang(name) values (?)", ("Python",))
    except sqlite3.IntegrityError:
        print("couldn't add Python twice")

    # Connection object used as context manager only commits or rollbacks transactions,
    # so the connection object should be closed manually
    con.close()
```

## web
```python=
urllib.parse

url = 'https://tw.yahoo.com/'
uc = urlparse(url)
html = requests.get(url).text
bs = BeautifulSoup(html, 'html.parser')
all_links = bs.find_all(['a', 'img'])

web = webdriver.Firefox()
web.get('https://tw.yahoo.com')
web.quit()
```

## sort
https://docs.python.org/3/howto/sorting.html#sortinghowto

a is a list
```python=
b = sorted(a) # return new list
a.list()      # sort in-place
```

## lambda
```python=
x = range(1, 10)
y = map(lambda i: i**3, x)
for i, value in enumerate(y):
    ...
```