Librería estándar¶
Librería estándar¶
Documentación¶
Módulo sys¶
Ejercicio: cat¶
$ ./cat.py file.txt
This is the first line of the file
...
This is the last one
Pistas: sys.stdout
Ejercicio: grep¶
$ ./grep.py string file.txt
...string...
Pistas: sys.argv
, open()
Opcional:
Especificar número de línea. Pista:
enumerate()
$ ./grep.py string file.txt Line 3: ...string...
Ejercicio: tee¶
$ cat.py file.txt | tee.py file2.txt
This is the first line of the file
...
This is the last one
Pistas: sys.stdin
Módulo random¶
Ejercicio: dice¶
$ ./dice.py
5
Pistas: random.randint
Módulos pathlib¶
Ejercicio: find¶
$ ./find.py path pattern
dir1/dir2/pattern.extension
dira/xxxpattern.extension
Pista: pathlib.Path.iterdir()
o pathlib.Path.glob()
Comodín |
Resultado |
Ejemplo |
Encuentra |
No encuentra |
---|---|---|---|---|
|
Cualquier conjunto de caracteres incluido _ninguno_ |
ca* |
ca, carro, casta |
caca |
|
Cualquier carácter incluido |
?oz |
coz, hoz |
oz, coza |
|
Alguno de los caracteres incluido en el conjunto |
no[ae] |
noa, noe |
noi |
|
Alguno de los caracteres incluido en el rango |
199[2-6] |
1993, 1995, 1996 |
1991, 1997 |
Módulo argparse¶
Ejercicio: -h/–help y –type¶
$ ./find.py -h
Usage: find.py [-h] [--type=EXT] pattern
Buscar archivos.
positional arguments:
pattern
optional arguments:
-h, --help show this help message and exit
--type EXT search EXT files
Pista: argparse
Módulo re¶
Ejercicio: Semantic Versioning¶
>>> assert parse_semver('1.0.11') == (1, 0, 11, None, None)
>>> assert parse_semver('1.7.1-rc.1') == (1, 7, 1, 'rc.1', None)
>>> assert parse_semver('3.14.7-100+x86_64') == (1, 0, 11, '100', 'x86_64')
Pista:
import re
REGEX = re.compile(
'^(?P<major>(?:0|[1-9][0-9]*))'
'\.(?P<minor>(?:0|[1-9][0-9]*))'
'\.(?P<patch>(?:0|[1-9][0-9]*))'
'(\-(?P<prerelease>[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?'
'(\+(?P<build>[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$'
)
Módulo datetime¶
Ejercicio: cumpleaños¶
$ ./age.py
Fecha de nacimiento> 01-01-1970
Día de la semana: jueves
Edad: 50 años, 0 meses y 1 días
Pistas: input()
, calendar.weekday()
y datetime.date.today()
Ejercicio: cumpleaños (2)¶
Opcional:
Procesa esta tabla y calcula constelación
Aries 19 April – 13 May
Taurus 14 May – 19 June
Gemini 20 June – 20 July
Cancer 21 July – 9 August
Leo 10 August – 15 September
Virgo 16 September – 30 October
Libra 31 October – 22 November
Scorpius 23 November – 29 November
Ophiuchus 30 November – 17 December
Sagittarius 18 December – 18 January
Capricornus 19 January – 15 February
Aquarius 16 February – 11 March
Pisces 12 March – 18 April
Pistas: .split()
Python Database API Specification (PEP249): ejemplo módulo sqlite3¶
Demo: SQLite (1)¶
>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> c = conn.cursor()
>>> # Create table
>>> c.execute('''CREATE TABLE stocks
... (date text, trans text, symbol text, qty real, price real)''')
<sqlite3.Cursor object at 0x...>
>>> # Insert a row of data
>>> c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
<sqlite3.Cursor object at 0x...>
>>> # Save (commit) the changes
>>> conn.commit()
Demo: SQLite (2)¶
>>> # Placeholder to avoid sql injection
>>> t = ('RHAT',)
>>> c.execute('SELECT * FROM stocks WHERE symbol=?', t)
<sqlite3.Cursor object at 0x...>
>>> print(c.fetchone())
('2006-01-05', 'BUY', 'RHAT', 100.0, 35.14)
>>> # Larger example that inserts many records at a time
>>> purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
... ('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
... ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
... ]
>>> c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
<sqlite3.Cursor object at 0x...>
Demo: SQLite (3)¶
>>> # Iterator form
>>> for row in c.execute('SELECT * FROM stocks ORDER BY price'):
... print(row)
...
...
('2006-01-05', 'BUY', 'RHAT', 100.0, 35.14)
('2006-03-28', 'BUY', 'IBM', 1000.0, 45.0)
('2006-04-06', 'SELL', 'IBM', 500.0, 53.0)
('2006-04-05', 'BUY', 'MSFT', 1000.0, 72.0)
Módulo subprocess¶
Demo: Ejecuta programas externos¶
Ejecuta el comando git pull para actualizar el repositorio.
import sys
import subprocess
args = ['git', 'pull']
with subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) as process:
for line in process.stdout:
text = str(line, encoding=sys.stdout.encoding)
sys.stdout.write(text)
if not process.returncode == 0:
print('ERROR')