Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Exz

Duvida, sobre input files. Numa função

Mensagens Recomendadas

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.