Difficulty with def and regex

3

I have the following list:

support;auteur;titre;nombre_de_prets

Bande dessinée jeunesse;Saint-Mars, Dominique de;Max et Lili ont volé des bonbons [Texte imprimé];1095
Livre jeunesse;Saint-Mars, Dominique de;Lili est stressée par la rentrée;1008
Livre ado;Saint-Mars, Dominique de;Max et Lili font du camping;992
Bande dessinée jeunesse;Cohen, Jacqueline;La salsa des saucisses [Texte imprimé];947
Bande dessinée jeunesse;Cohen, Jacqueline;Les fous du mercredi [Texte imprimé];908
Bande dessinée jeunesse;Saint-Mars, Dominique de;Lili est fâchée avec sa copine [Texte imprimé];882
Bande dessinée jeunesse;Cohen, Jacqueline;Ca roule ! [Texte imprimé];872
Livre jeunesse;Saint-Mars, Dominique de;Lili trouve sa maîtresse méchante [Texte imprimé];871
Bande dessinée jeunesse;Sobral, Patrick;Griffes et plumes [Texte imprimé];864
Bande dessinée ado;Lyfoung, Patricia;Je veux que tu m'aimes ! [Texte imprimé];657
Bande dessinée ado;Lyfoung, Patricia;Je crois que je t'aime;650

I wrote this script with detailed functions and NOTHING works ...

with open('les-titres-les-plus-pretes.csv', 'r') as f:
    lines = f.readlines()
    collones = lines[0].split(';') 
    params = [] 
    for line in lines[1:]: 
        params.append(line.split(';')) 
    #print (params)

def numero_emprestimos():
    """Funçao que conta o numero de emprestimos da lista"""
    num_linhas = 0
    for x in params:
        if x == '\n':
            num_linhas = num_linhas + 1
            print (num_linhas)

def ordem():
    """Funçao que calcula o numero de emprestimos e os ordena pelo support"""
    num_linhas = 0
    for x in params:
        if x == '\n':
            num_linhas = num_linhas + 1
            print(num_linhas.sort())

def titulos_com():
    """Cette fonction trouve les titres comportant un ? ou !"""
    #params = re.compile('?|!')
    #params.findall()
    print (re.findall(r'?|!'), params, re.I)

def porcentagem_jeunesse(jeunesse, params):
    """Cette fonction calcule le pourcentage de titres jeunesse"""
    jeun= (re.findall(r'?|!'), params, re.I)
    print (100 * float(jeun)/float(params))
    
asked by anonymous 07.12.2016 / 10:13

1 answer

4

So, I may have misunderstood some of the functions, if so, say that I try to fix:

with open('tests.csv', 'r') as f:
    lines = f.readlines()
    colunas = [i.strip() for i in lines[0].split(';')]
    dados = [i.split(';') for i in lines[1:]] # sublistas com os dados de cada linha

def numero_emprestimos():
    return len(dados)

def ordem():
    return sorted(dados) # aqui temos a "sorte" de que e para ordenar pelo suporte que e o primeiro item de cada sublista, senao tinhamos de acrescentar uma funcao ao metodo sorted

def titulos_com():
    titres = []
    for suport, auteus, titre, nombre in dados:
        if '?' in titre or '!' in titre:
            titres.append(titre)
    return titres
    # isto tudo acima podia ser substituido por:
    # return [i[2] for i in dados if '?' in i[2] or '!' in i[2]]

def jeunesse_percentagem():
    total_dados = len(dados)
    len_jeu = len([i for i in dados if "jeunesse" in i[0]]) # contar todas as linhas que tem "jeunesse" em suporte
    return (len_jeu * 100) / total_dados

I comment on the lines that seem more confusing and explain them

The outputs, with the data you provided in the question:

numero_emprestimos() # 11
ordem() # [['Bande dessinée ado', 'Lyfoung, Patricia', "Je crois que je t'aime", '650'], ['Bande dessinée ado', 'Lyfoung, Patricia', "Je veux que tu m'aimes ! [Texte imprimé]", '657\n'], ['Bande dessinée jeunesse', 'Cohen, Jacqueline', 'Ca roule ! [Texte imprimé]', '872\n'], ['Bande dessinée jeunesse', 'Cohen, Jacqueline', 'La salsa des saucisses [Texte imprimé]', '947\n'], ['Bande dessinée jeunesse', 'Cohen, Jacqueline', 'Les fous du mercredi [Texte imprimé]', '908\n'], ['Bande dessinée jeunesse', 'Saint-Mars, Dominique de', 'Lili est fâchée avec sa copine [Texte imprimé]', '882\n'], ['Bande dessinée jeunesse', 'Saint-Mars, Dominique de', 'Max et Lili ont volé des bonbons [Texte imprimé]', '1095\n'], ['Bande dessinée jeunesse', 'Sobral, Patrick', 'Griffes et plumes [Texte imprimé]', '864\n'], ['Livre ado', 'Saint-Mars, Dominique de', 'Max et Lili font du camping', '992\n'], ['Livre jeunesse', 'Saint-Mars, Dominique de', 'Lili est stressée par la rentrée', '1008\n'], ['Livre jeunesse', 'Saint-Mars, Dominique de', 'Lili trouve sa maîtresse méchante [Texte imprimé]', '871\n']]
titulos_com() # ['Ca roule ! [Texte imprimé]', "Je veux que tu m'aimes ! [Texte imprimé]"]
jeunesse_percentagem() # 72.72727272727273
    
07.12.2016 / 10:59