Python Modulos
Python Modulos
Python
Como ya hemos visto, podemos importar nuevos módulos de la libre‐
ría extándar de Python o de terceros con import <modulo>, pero hay
varias maneras de hacerlo:
In [10]: i
immp
poorrtt mma
atth
h # importa el módulo math
In [11]: i
immp
poorrtt mma
atth
h aass M M # importa el módulo math llamánd
In [12]: f
frro
omm m ma
atth
h iimmp
poorrtt sin, cos, pi # importa las funcione
In [13]: f
frro
omm m ma
atth
h iimmp
poorrtt * # importa todas las funciones de
#!/usr/bin/python3
#-*- coding: utf-8 -*-
__author__ = "Jorge"
__copyright__ = "Curso de Python"
__credits__ = ["Pepe", "José Luis", "Roberto"]
__license__ = "GPL"
__version__ = "1.0"
__email__ = "[email protected]"
__status__ = "Development"
ddeeff cubo(x):
"""Calcula el cubo de un numero"""
y = x**3
rre
ettu
urrnn y
In [20]: cubo.__doc__
Out[20]: 'Programa de calculo del cubo de un numero'
In [21]: cubo.cubo(3)
Out[21]: 27
In [22]: cubo.cubo.__doc__
Out[22]: 'Calcula el cubo de un numero'
In [23]: cubo.__version__
Out[23]: '1.0'
$ echo $PYTHONPATH
:/home/japp/codigo/lib/:/usr/local/aspylib/:/usr/local/lib/pyt
iimmppoorrtt s
syys
s
sys.path.append('/home/japp/mis_modulos/')
sys.path.append('C:\mis_modulos')
mi_paquete/
__init__.py
modulo1.py
modulo2.py
utiles/
__init__py
utiles1.py
config.py
iimmppoorrtt m
mii_
_ppaaqqu
ueet
tee
ffrroomm m
mii_
_ppaaqqu
ueet
tee i
immp
poorrtt utiles1
iimmppoorrtt o
oss
os.chdir("/home/japp/Documentos/")
os.getcwd()
# /home/japp/Documentos/
ffoorr fichero i
inn ficheros:
print os.path.isdir(fichero) # .isfile(), islink()
ficheros = glob("*.txt")
# Son listas también pero con una ruta relativa, así que no fu
ficheros = glob("/home/japp/") # no devuelve nada
ficheros = glob("/home/japp/*") # Esto si
os.mkdir("registro")
# os.makedirs('/home/japp/Documentos/datos/pruebas') # Linux,
# os.makedirs('C:\\Mis Documentos\\datos\\pruebas') # Window
os.chmod("registro", 0700)
os.rename("registro", "registros")
len(contenido)
print(contenido[:30])
#'nombre, name, nom, iso2, iso3,'
fichero = open("paises.csv")
lineas = fichero.readlines() # Lee línea a línea, devuelve un
fichero.close()
len(lineas)
247
iimmppoorrtt u
urrl
llliibb.
.rre
eqqu
uees
stt
iimmppoorrtt c
cssv
v
# Fichero remoto
# https://gist.github.com/brenes/1095110
url = "https://gist.githubusercontent.com/brenes/1095110/raw/f
f_out.writelines(lineas_P)
f_out.close()
iimmppoorrtt s
shhe
ellvvee
shelf_file = shelve.open('datos')
shelf_file['numeros'] = numeros
shelf_file.close()
shelf_file = shelve.open('datos')
shelf_file['numeros']
os.getlogin()
#'japp'
os.getgroups()
#[191, 256, 294, 329, 350, 2000]
os.getenv('HOME')
os.putenv('HOME', '/scratch/japp')
os.uname()
# ('Linux', 'vega', '4.1.13-100.fc21.x86_64', '#1 SMP Tue Nov
iimmppoorrtt p
plla
attffoor
rmm
print('uname:', platform.uname())
"""
uname: ('Linux', 'vega', '4.1.13-100.fc21.x86_64', '#1 SMP Tue
system : Linux
node : vega
release : 4.1.13-100.fc21.x86_64
version : #1 SMP Tue Nov 10 13:13:20 UTC 2015
machine : x86_64
processor: x86_64
distribution: fedora 21 Twenty One
"""
shutil.copytree("/home/japp/Documentos", "/home/japp/Documento
shutil.move('paises-copy.csv', '/home/japp/Documentos/'
ffoorr fichero i
inn ficheros:
newZip.write(fichero, compress_type=zipfile
fichero_zip.close()
fichero_zip = zipfile.ZipFile("datos.zip")
fichero_zip.namelist()
bright_star_info.compress_size
# 248269
# Extraigo el contenido
fichero_zip.extract('bright_star.tsv', '/home/japp/Documents/'
fichero_zip.extractall() # todos los ficheros
fichero_zip.close()
iimmppoorrtt d
daat
teettiim
mee
iimmppoorrtt t
tiim
mee
print(fecha.strftime("%b %d %Y %H:%M:%S"))
# Oct 08 1937 00:00:00
# Fecha en string
fecha_str = "2017-05-16 10:30:00"
# Cambio de idioma
iimmppoorrtt l
looc
caallee
hoy = datetime.date.today()
print('Hoy:', hoy)
un_dia = datetime.timedelta(days=1)
print('Lapso de un día:', one_day)
Hay que tener en cuenta que los tiempos se toman de ordenador, in‐
cluyendo la zona horaria, por lo que generalmente serán en hora lo‐
cal. Si queremos convertir a otra zona horaria, debemos usar el mó‐
dulo ppyyttzz:
ffrroomm p
pyyt
tzz i
immp
poorrtt timezone
hora_us_pacific = hora_utc.replace(tzinfo=timezone
iimmppoorrtt c
caal
leenndda
arr
cal = calendar.month(2017, 5)
print(cal)
May 2017
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
print(calendar.TextCalendar(calendar.MONDAY).formatyear
Llamadas al sistema
iimmppoorrtt o
oss
os.system('touch /home/japp/Documents')
iimmppoorrtt s
suub
bpprrooc
cees
sss
Puesto que los canales de entrada y salida del proceso call() es‐
tán ligados a la entrada y salida padre, no puede capturar la salida
del comando que ejecuta, como ocurre con os.system(). Si quere‐
mos capturar la salida podemos emplear check_output() y luego
procesar el resultado como queramos.
print(output)
"""
PID TTY STAT TIME COMMAND
3901 ? S 0:00 sshd: invweb@pts/2
3902 pts/2 Ss 0:00 -bash
4248 pts/2 Sl 0:02 gedit cdb_import.py
4527 ? Sl 0:00 /usr/libexec/dconf-service
6134 ? Sl 0:15 /usr/local/apache//bin/httpd -k sta
13324 pts/2 Sl+ 0:00 /usr/bin/python /usr/bin/ipython
13613 pts/2 R+ 0:00 ps -x
26515 ? S 0:03 sshd: invweb@pts/0
26516 pts/0 Ss+ 0:00 -bash
"""
# Separo for filas
output_lines = output.split("\
\nn")
print(resultados)
ddeeff esta_viva(hostname):
"""
Hace un ping a una maquina para saber si esta conectada
"""
iif
f error == "":
print("El ordenador {} está conectado"
r
reet
tuurrnn T
Trru
uee
eel
lsse
e:
print("El ordenador {} está KO".format(
r
reet
tuurrnn F
Faal
lssee
esta_viva('vega')
iimmppoorrtt fft
tppl
liibb
iimmppoorrtt oos
s
ffrroomm g gl
loob
b iimmppoorrtt glob
ftp = ftplib.FTP("ftp.iac.es")
login = ftp.login("[email protected]", "anonymous")
ftp.cwd(destination_dir)
os.chdir(origin_dir)
ffoorr filename i
inn files:
infile = open(filename, 'r')
ftp.storlines('STOR ' + os.path.basename(filename
infile.close()
Hay que fijarse que solo copia ficheros de uno en uno, si se quiere
copiar recursivamente hay que implementar una copia recursiva con
os.walk() o similar e ir creado directorios con mkdir().
No hay un módulo específico para ssh, pero se puede usar el del sis‐
tema usando el módulo pexpect, que permite manejar envío de in‐
formación entre un servidor y un cliente, en ambas direcciones.
iimmppoorrtt p
peex
xppeecct
t
iimmppoorrtt t
tiim
mee
host = "vega"
password = "secreto"
iiff i == 0:
ssh.sendline('yes')
# Se dan una lista de posibles salidas del comando: nueva
# la contraseña o el prompt del sistema si no pide contras
i = ssh.expect([ssh_newkey, 'password: $',
ssh.sendline(password)
ssh.expect(pexpect.EOF)
eelliiff i == 1:
ssh.sendline(password)
ssh.expect(pexpect.EOF, timeout=10)
eelliiff i == 2:
ppa
asss
s
ssh.close()