Function extract Python csv column

Asked

Viewed 78 times

0

I did this function to extract the desired column from csv. Then, make an append in column[] passing a while to only take the Dice from the corresponding column. And finally a condition to separate str from int.

My doubt is in the return of this data, that instead of bringing only the type of data str it also returns the int. Thank you in advance.

%%writefile carros.csv
id│valor_venda│valor_manutencao│portas│pessoas│porta_malas
1 │vhigh      │med             │2     │2      │small
2 │med        │vhigh           │2     │2      │small
3 │low        │vhigh           │2     │2      │small
4 │low        │high            │2     │2      │small
5 │low        │high            │2     │2      │small
6 │low        │high            │4     │4      │big
7 │low        │high            │4     │4      │big
8 │low        │med             │2     │2      │small
9 │low        │med             │2     │2      │small
10│low        │med             │2     │2      │small
11│low        │med             │4     │4      │big
12│low        │low             │2     │2      │small
13│low        │low             │4     │4      │small
14│low        │low             │4     │4      │med


def extrai_coluna_csv(nome_arquivo: str, indice_coluna: int, tipo_dado: str):

coluna = []

    ## leia o arquivo com o comando 'with' utilizando o parametro 'nome_arquivo'
with open(file=nome_arquivo, mode='r', encoding='utf8') as fp:

    ## extraia a coluna do arquivo utilizando o parametro 'indice_coluna'
linha = fp.readline()
linha_separada = linha.split(sep=',')
linha = linha_separada[indice_coluna]

coluna.append(linha)

    ## use a estrutura de decisão if/elif/else para fazer a conversão do tipo de dados utilizando o parametro 'tipo_dado'
while linha:

    if tipo_dado == 'str':
        coluna.append(linha)
    elif tipo_dado == 'int':
        coluna.append(linha)
    else:
        print('Error')

    linha = fp.readline()

return coluna


## extrair a coluna valor_venda
  valor_venda = extrai_coluna_csv(
  nome_arquivo='./carros.csv', indice_coluna=1, tipo_dado='str')
  print(valor_venda)  # deve retornar ['vhigh', 'med', 'low', ...]
  • 1

    yes, first post here on stackoverflow, already edited. I just couldn’t pass the csv file. Thanks for your attention.

  • I understand what the program does, but what the doubt is?

  • My return cannot only take the values of # ['vhigh', 'med', 'low', ...], it returns all lines and also the values of int, when only the datatype must be str.

1 answer

0


I don’t think this is the most pythonic way to do it but I changed the code with a workaround. First, I took the variable type statement tipo_dado in function extrai_coluna_csv. So I can put any type of variable there. Inline comments explain the use.

def extrai_coluna_csv(nome_arquivo: str, indice_coluna: int, tipo_dado):
    print(isinstance(tipo_dado, int))
    coluna = []

    ## leia o arquivo com o comando 'with' utilizando o parametro 'nome_arquivo'
    with open(file=nome_arquivo, mode='r', encoding='utf8') as fp:
        linha=linha = fp.readline()
        while len(linha):
            ## extraia a coluna do arquivo utilizando o parametro 'indice_coluna'
            linha = fp.readline()
            #print(linha)
            linha_separada = linha.split(sep=',')
            #print(linha_separada)
            if indice_coluna >= len(linha_separada):
                break
            
            linha = linha_separada[indice_coluna]
            coluna.append(linha)
            ## use a estrutura de decisão if/elif/else para fazer a conversão do tipo de dados utilizando o parametro 'tipo_dado'
            if isinstance(tipo_dado, str):
                coluna.append(linha)
            elif isinstance(tipo_dado, int):
                coluna.append(linha)
            else:
                print('Error')

    return coluna


## extrair a coluna valor_venda
## passei um valor do tipo string no tipo_dado
valor_venda = extrai_coluna_csv(nome_arquivo='./carros.csv', indice_coluna=1, tipo_dado="")
print(valor_venda)  # deve retornar ['vhigh', 'med', 'low', ...]

## extrair a coluna portas
## passei um valor de tipo numérico no tipo dado
valor_venda = extrai_coluna_csv(nome_arquivo='./carros.csv', indice_coluna=1, tipo_dado=1)
print(valor_venda) 
  • Thanks Emerson, but had already tried for type() and still did not enter the condition to only take the column with values in str.

  • You’re right, it doesn’t work. I edited with a workaround I thought here.

  • Your code works well Emerson, I tested it here and went through the whole list by types. I thank you again for the strength.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.