Es solo una convención para decir que esa función o variable es "privada" (Esto también depende en parte del lenguaje, en Go me parece que si empieza con minúscula es privada y si es mayúscula publica, y tiene consecuencias reales en cuanto al acceso de estas).
@@emilianoguerrero4984 si yo normalmente cada clase o función en python yo la nombro con mayúscula la primera letra de cada palabra y sin espacio (class ImprimirVariable) y nunca me había topado con esa convención gracias por tu aclaración
@@JavierGonzalez-km7ds lo que pasa es que en python la convención es así: Clase: NombreDeLaClase Metodo: nombre_metodo(): Método primado: _nombre_metodo(): Variable: nombre_variable Variable privada: _nombre_variable Variable protegida: __nombre_variable Constante: NOMBRE_CONSTANTE
Segun se, el proposito de poner un punto al principio de un path o de un archivo como esta en el video, es para indicar que empiese a buscar el path desde el directorio actual. Corriganme si estoy mal.
Cuando hacemos referencia a una ruta, efectivamente es para señalar que empiece la tarea indicada desde el directorio actual. Para el caso mostrado en esta clase es para hacer referencia a un fichero o directorio oculto. Fichero/Directorio: ( ".fichero.txt" ) Path: (" . / ") después del punto colocamos el / para señalar que es un Path.
El . Adelante dentro del nombre del archivo o carpeta es para que sea oculto, eso lo podes ver simplemente haciendo un ls, el archivo no aparecerá. Para verlo habrá que ejecutar ls -la
todo excelente pero como carajos saltaste al final si por alla pareciera q era al comienzo osea no le encuentro cuerpo al formato del .py, es decir, lo que aprendimos aca se anexa a un interactivo ??
import sys import os import csv """ clients = [ { #Creando un diccionario para Pablo 'name' : 'Pablo', 'company' : 'Google', 'email' : 'pablo@gmail.com', 'position' : 'Software engineer', }, { #Dicicionario para Ricardo 'name' : 'Ricardo', 'company' : 'Facebook', 'email' : 'richardfb@gmail.com', 'position' : 'Data engineer', } ] """ CLIENT_TABLE = '.clients.csv' #El punto es para ocultar el archivo CLIENT_SCHEMA = ['name', 'company', 'email', 'position'] #Lista de llaves que usará csv para construir los diccionarios clients = [] def _initialize_clients_from_storage(): with open(CLIENT_TABLE, mode='r') as f: reader = csv.DictReader(f, fieldnames=CLIENT_SCHEMA) for row in reader: clients.append(row) #Agregando cada fila existente en el reader como si fuera un diccionario def _save_clients_to_storage(): #Toma la lista de clientes y la guarda en el archivo tmp_table_name = '{}.tmp'.format(CLIENT_TABLE) #Usa una tabla temporal con el mismo nombre de Client table pero en tmp with open(tmp_table_name, mode='w') as f: writer = csv.DictWriter(f, fieldnames=CLIENT_SCHEMA) writer.writerows(clients) #Escribe todos los renglones del archivo os.remove(CLIENT_TABLE) #Elimina la tabla temporal os.rename(tmp_table_name, CLIENT_TABLE) #Reenombra la nueva tabla con el nombre original (la que se eliminó) def create_client(client): global clients if client not in clients: clients.append(client) else: print(' \t--- Client already in the client\'s list ---') def delete_client (client_id): global clients for idx, client in enumerate(clients): if idx == client_id: del clients[idx] print(' \t--- Client deleteted ---') elif idx != client_id: print(' \t--- Client name is not in client\'s list ---') break def update_client(client_id, updated_client): #Recibe el nombre del cliente y su nuevo nombre global clients if len(clients) - 1 >= client_id: clients[client_id] = updated_client #Reemplaza el nuevo nombre else: print(' \t--- Client is not in client\'s list ---') def list_clients(): for idx, client in enumerate(clients): #Usando enumerate para ciclar en la lista y saber los índices print('{uid} | {name} | {company} | {email} | {position}'.format( uid = idx, name = client['name'], company = client['company'], email = client['email'], position = client['position'] )) def search_client(clien_name): for client in clients: if client != client_name: continue #Un loop hasta que encuentre el cliente else: return True #Retorna True cuando lo encuentra def _get_client_from_user(): client = { 'name' : _get_client_field('name'), 'company' : _get_client_field('company'), 'email' : _get_client_field('email'), 'position' : _get_client_field('position'), } return client def _get_client_field(field_name): field = None while not field: field = input(' What is the client {}? '.format(field_name)) return field def _print_welcome(): print('*' * 40) print('\tWELCOME TO GEAR SHOPPING') print('*' * 40) print('What would you like to do?') print('[C]reate client ') print('[D]elete client ') print('[U]pdate client ') print('[L]ist clients ') print('[S]earch client ') if __name__ == '__main__': _initialize_clients_from_storage() _print_welcome() command = input(' Enter a letter: ') command = command.upper() os.system('clear') if command == 'C': client = _get_client_from_user() #Usa la función para pedir valores para el diccionario create_client(client) #Manda el diccionario cliente print(' \t--- Contacts updated ---') elif command == 'D': print(' \tSelect the contact to delete ') list_clients() client_id = int(_get_client_field('id')) delete_client(client_id) elif command == 'U': print(' \tSelect the contact to update ') print(' \tSelect the contact to update ') list_clients() client_id = int(_get_client_field('id')) updated_client = _get_client_from_user() update_client(client_id, updated_client) elif command == 'L': list_clients() elif command == 'S': client_name = _get_client_field('name') found = search_client(client_name) if found: #Usando el True devuelto por la función print(' \t--- The client is in the client\'s list ---') else: print(' \tThe client {} is not in our client\'s list'.format(client_name)) #Si el valor retornado es False entonces no existe else: print('.*'*20, ' \t\tE R R O R \t Invalid Command') print('*.'*20) _save_clients_to_storage()
Solo ocupas ganas y RUclips para empezar, luego a leer documentación y practicar. Yo empece a los 12, aprendí a programar sin Internet (sin Internet propio, mis vecinos si tenían pero con cifrado WEP fácil de crackear) y con una mini laptop HP que me regalaron, ahorita tengo 20 años y trabajo como programador. No ocupas gastar nada, si usas Platzi tienes la ventaja de que ellos te dan el camino a seguir pero si no lo puedes pagar todo el conocimiento esta libre!
es justo lo que buscaba para mi proyecto de la universidad... pero una pena que escribas todo en ingles, no entiendo si son variables o es la manera que pide el programa para funcionar, si escribieras en español uno sabrìa què es variable (lo que podría modificar yo) y qué no (lo que el programa me obliga a poner). Somos latinos, enseñemonos como tales jajaja
no sabia que freddie mercury sabia programar
es borat !
Excelente explicación y el profesor realmente lo hace increíble. Me parece que es muy bueno el que enseñen bases sólidas!!
El . Adelante del nombre de un archivo o carpeta en sistemas basados en unix o gnu/linux significa que son ocultos
ALV eso explica muchas cosas xD
Excelente video. Muy buena explicación. Saludos #Team_platzi
muy buen profesor
una pregunta Por que usar Guion bajo para nombrar las Funciones? "_print_welcome"
Es solo una convención para decir que esa función o variable es "privada"
(Esto también depende en parte del lenguaje, en Go me parece que si empieza con minúscula es privada y si es mayúscula publica, y tiene consecuencias reales en cuanto al acceso de estas).
@@emilianoguerrero4984 si yo normalmente cada clase o función en python yo la nombro con mayúscula la primera letra de cada palabra y sin espacio (class ImprimirVariable) y nunca me había topado con esa convención gracias por tu aclaración
@@JavierGonzalez-km7ds lo que pasa es que en python la convención es así:
Clase: NombreDeLaClase
Metodo: nombre_metodo():
Método primado: _nombre_metodo():
Variable: nombre_variable
Variable privada: _nombre_variable
Variable protegida: __nombre_variable
Constante: NOMBRE_CONSTANTE
Excelente clase!
excelente video
Son grandes Platzi
Excelente .. en poco tiempo recordé python :D de mi colegio
Segun se, el proposito de poner un punto al principio de un path o de un archivo como esta en el video, es para indicar que empiese a buscar el path desde el directorio actual.
Corriganme si estoy mal.
Cuando hacemos referencia a una ruta, efectivamente es para señalar que empiece la tarea indicada desde el directorio actual.
Para el caso mostrado en esta clase es para hacer referencia a un fichero o directorio oculto.
Fichero/Directorio: ( ".fichero.txt" )
Path: (" . / ") después del punto colocamos el / para señalar que es un Path.
@@_ferdinandalexa Ok, no sabia sobre eso, gracias por el aporte!
Pensé que era para indicar que era un archivo del sistema, Linux por lo general lo oculta al usuario.
El . Adelante dentro del nombre del archivo o carpeta es para que sea oculto, eso lo podes ver simplemente haciendo un ls, el archivo no aparecerá. Para verlo habrá que ejecutar ls -la
no entendí no vergas pero igual lo vi xd
Eso!!
genial podríais pasarnos tu configuración de vim
todo excelente pero como carajos saltaste al final si por alla pareciera q era al comienzo osea no le encuentro cuerpo al formato del .py, es decir, lo que aprendimos aca se anexa a un interactivo ??
Mi profe loco VIM xD
el mejor profe
El "." indica que es un archivo o carpeta oculto en sistemas UNIX-like,como por ejemplo la carpeta ".ssh" que esta en el directorio del usuario
tan oculto que el sistema python no lo encuentra jajaj ay dios errores que nos ponen a transnochar jje
Y que pasa si es sin punto?
Alguien amable que postee el código resultante?
import sys
import os
import csv
"""
clients = [
{ #Creando un diccionario para Pablo
'name' : 'Pablo',
'company' : 'Google',
'email' : 'pablo@gmail.com',
'position' : 'Software engineer',
},
{ #Dicicionario para Ricardo
'name' : 'Ricardo',
'company' : 'Facebook',
'email' : 'richardfb@gmail.com',
'position' : 'Data engineer',
}
]
"""
CLIENT_TABLE = '.clients.csv' #El punto es para ocultar el archivo
CLIENT_SCHEMA = ['name', 'company', 'email', 'position'] #Lista de llaves que usará csv para construir los diccionarios
clients = []
def _initialize_clients_from_storage():
with open(CLIENT_TABLE, mode='r') as f:
reader = csv.DictReader(f, fieldnames=CLIENT_SCHEMA)
for row in reader:
clients.append(row) #Agregando cada fila existente en el reader como si fuera un diccionario
def _save_clients_to_storage(): #Toma la lista de clientes y la guarda en el archivo
tmp_table_name = '{}.tmp'.format(CLIENT_TABLE) #Usa una tabla temporal con el mismo nombre de Client table pero en tmp
with open(tmp_table_name, mode='w') as f:
writer = csv.DictWriter(f, fieldnames=CLIENT_SCHEMA)
writer.writerows(clients) #Escribe todos los renglones del archivo
os.remove(CLIENT_TABLE) #Elimina la tabla temporal
os.rename(tmp_table_name, CLIENT_TABLE) #Reenombra la nueva tabla con el nombre original (la que se eliminó)
def create_client(client):
global clients
if client not in clients:
clients.append(client)
else:
print('
\t--- Client already in the client\'s list ---')
def delete_client (client_id):
global clients
for idx, client in enumerate(clients):
if idx == client_id:
del clients[idx]
print('
\t--- Client deleteted ---')
elif idx != client_id:
print('
\t--- Client name is not in client\'s list ---')
break
def update_client(client_id, updated_client): #Recibe el nombre del cliente y su nuevo nombre
global clients
if len(clients) - 1 >= client_id:
clients[client_id] = updated_client #Reemplaza el nuevo nombre
else:
print('
\t--- Client is not in client\'s list ---')
def list_clients():
for idx, client in enumerate(clients): #Usando enumerate para ciclar en la lista y saber los índices
print('{uid} | {name} | {company} | {email} | {position}'.format(
uid = idx,
name = client['name'],
company = client['company'],
email = client['email'],
position = client['position']
))
def search_client(clien_name):
for client in clients:
if client != client_name:
continue #Un loop hasta que encuentre el cliente
else:
return True #Retorna True cuando lo encuentra
def _get_client_from_user():
client = {
'name' : _get_client_field('name'),
'company' : _get_client_field('company'),
'email' : _get_client_field('email'),
'position' : _get_client_field('position'),
}
return client
def _get_client_field(field_name):
field = None
while not field:
field = input('
What is the client {}? '.format(field_name))
return field
def _print_welcome():
print('*' * 40)
print('\tWELCOME TO GEAR SHOPPING')
print('*' * 40)
print('What would you like to do?')
print('[C]reate client ')
print('[D]elete client ')
print('[U]pdate client ')
print('[L]ist clients ')
print('[S]earch client ')
if __name__ == '__main__':
_initialize_clients_from_storage()
_print_welcome()
command = input('
Enter a letter: ')
command = command.upper()
os.system('clear')
if command == 'C':
client = _get_client_from_user() #Usa la función para pedir valores para el diccionario
create_client(client) #Manda el diccionario cliente
print('
\t--- Contacts updated ---')
elif command == 'D':
print('
\tSelect the contact to delete ')
list_clients()
client_id = int(_get_client_field('id'))
delete_client(client_id)
elif command == 'U':
print('
\tSelect the contact to update ')
print('
\tSelect the contact to update ')
list_clients()
client_id = int(_get_client_field('id'))
updated_client = _get_client_from_user()
update_client(client_id, updated_client)
elif command == 'L':
list_clients()
elif command == 'S':
client_name = _get_client_field('name')
found = search_client(client_name)
if found: #Usando el True devuelto por la función
print('
\t--- The client is in the client\'s list ---')
else:
print('
\tThe client {} is not in our client\'s list'.format(client_name)) #Si el valor retornado es False entonces no existe
else:
print('.*'*20, '
\t\tE R R O R
\t Invalid Command')
print('*.'*20)
_save_clients_to_storage()
Para entender mejor... suban el curso completo :V (?
Chihuahua ¿esta es una señal para regresar a mi curso de python?
y luego de programar el profe se fue a dirigir un cartel de drogas
No sabía que Lionel Richie supiera python
No sabía que el Dr. Eggman sabía programar
me gustaria aprender a programar pero no tengo los recursos que puedo hacer
que me aconsejan
Trabaja y gana dinero.
Ya estas en yt, busca tutoriales de lo que quieras hacer
Solo ocupas ganas y RUclips para empezar, luego a leer documentación y practicar.
Yo empece a los 12, aprendí a programar sin Internet (sin Internet propio, mis vecinos si tenían pero con cifrado WEP fácil de crackear) y con una mini laptop HP que me regalaron, ahorita tengo 20 años y trabajo como programador. No ocupas gastar nada, si usas Platzi tienes la ventaja de que ellos te dan el camino a seguir pero si no lo puedes pagar todo el conocimiento esta libre!
Uy eso lo aprendí a las malas en Vb.net
No sabía que Lionel Richie sabía python
.client.csv archivo oculto
el martes andaba queriendo leer un archivo en python, los de platzi son brujos
es justo lo que buscaba para mi proyecto de la universidad... pero una pena que escribas todo en ingles, no entiendo si son variables o es la manera que pide el programa para funcionar, si escribieras en español uno sabrìa què es variable (lo que podría modificar yo) y qué no (lo que el programa me obliga a poner). Somos latinos, enseñemonos como tales jajaja
Borat mexicano enseñando Programación!
Huy que es todo eso jajaja
programador que se respeta, programa en Vim.