Jump to content
Exz

Duvida, sobre input files. Numa função

Recommended Posts

Exz

Boas, tenho um script, que faz uma media o meu a partir de um/dois ficheirso exteriores de input o meu problema é que para as funções funcionarem correctamente eu tenho que especifiar os ficheiros dentro das funções por exemplo.

def read_csv(filename):
   with open(filename, 'r') as file:
    input_file = csv.DictReader(file, delimiter=";")
    results = []
    for line in input_file:
	    results.append(line)
   return results

def get_age(animal_name):
   # the function calculate the age of given animal
   animal_age = read_csv('animais.csv')
   for a in animal_age:
    if a['Nome do animal'] == animal_name:
	    return int(a['Idade'])

O problema é que eu chamo a função get_Age numa terceira função e se o parametro animal_age = read_csv('animais.csv') não estiver espeficicado isto n corre, se for perciso posto aqui a terceira função.

Share this post


Link to post
Share on other sites
pwseo

Exz,

Não percebi bem qual é o problema. Ainda assim, tens a certeza que a maneira mais correcta de obteres a idade de um animal é ler o ficheiro .csv? Isso significa que para 10 animais terás que ler o ficheiro 10 vezes.

No quadro de Python deste fórum tens já 2 ou 3 tópicos com colegas teus a resolver o mesmo problema. Dá uma olhadela.

Share this post


Link to post
Share on other sites
Exz

Eu já tive a ver os topicos, eu já tenho isto feito da-me a media e isso tudo o meu problema é que tenho que espeficicar o nome do ficheiro se como argumento der outro nome qual quer de um ficheiro que n seija o msm do 'animais.csv' já n funciona posso postar aqui o resto do codigo que faz a media se percisares.

Share this post


Link to post
Share on other sites
Exz
def average_age(owners_animal, animal_age):
   # the function return a list which contain all owners and its animals' average age
   results = []
   owners_list = []
   animal_list = []
   owners_animal = read_csv(owners_animal)
   animal_age = read_csv(animal_age)

   for o in owners_animal:
    if o['Nome do dono'] not in owners_list:
	    owners_list.append(o['Nome do dono'])
	    result = {'Nome do dono': o['Nome do dono'], 'Idade': []}
	    age = get_age(o['Nome do animal']) or 0
	    result['Idade'].append(age)
	    results.append(result)
    else:
	    for r in results:
		    if r['Nome do dono'] == o['Nome do dono']:
			    r['Idade'].append(get_age(o['Nome do animal']))
   results = [{'Nome do dono': obj.get('Nome do dono'), 'Media das Idades': int(sum(obj['Idade'])/len(obj['Idade']))} for obj in results]
   return results
def media_idades(nome_ficheiro_animais, nome_ficheiro_donos, nome_ficheiro_medias):
   with open(nome_ficheiro, 'w') as ficheiro_csv:
    escritor = csv.DictWriter(ficheiro_csv, delimiter = ';', fieldnames = cabecalhos)
    escritor.writeheader()
    for linha in lista_de_dicionarios:
	    escritor.writerow(linha)
parte que faltava.

Share this post


Link to post
Share on other sites
Exz

Já agora há alguma maneira de por a get_age dentro da função average_Age com isto quer dizer fazer o que a get age faz mas dentro da average_Age? Para não ser duas funções separadas era mais facil para eu conseguir trabalhar.

Share this post


Link to post
Share on other sites
pwseo

Eu já tive a ver os topicos, eu já tenho isto feito da-me a media e isso tudo o meu problema é que tenho que espeficicar o nome do ficheiro se como argumento der outro nome qual quer de um ficheiro que n seija o msm do 'animais.csv' já n funciona posso postar aqui o resto do codigo que faz a media se percisares.

Mas por que motivo haverias de dar outro ficheiro se o que tu queres é o animais.csv? De qualquer modo, ou a tua dúvida não tem nada de especial, ou então não estás a explicar-te bem. Mostra o que está a falhar e de que forma.

E já agora, o teu código está muito confuso. A tua função get_age não faz sentido, e nos excertos que mostraste há muitas variáveis por definir ou então definidas e sem uso. Isso precisava de ser reformulado.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.