How to get a specific data type from a text file



  • I have a text file structured as follows

    • 1
    • Name
    • CPF
    • Address
    • Telephone

    I would like to know how I do to take only the lines that contain integer, in the case the code(identified as 1), because I am trying to make an auto increment in python Note: There is something I should do to improve this formatting, thank you for the comments

    Note: Writing Code

    codigo = verifica_codigo_cliente()
    nome = raw_input("Digite o nome do Cliente: ")
    cpf = raw_input("Digite o CPF do Cliente: ")
    endereco = raw_input("Digite o endereço do Cliente: ")
    telefone = raw_input("Digite o telefone do Cliente: ")
    arquivo_cliente.write(codigo)
    arquivo_cliente.write("\n" + nome + "\n")
    arquivo_cliente.write(cpf + "\n")
    arquivo_cliente.write(endereco + "\n")
    arquivo_cliente.write(telefone + "\n\n")
    

    Function to check the code, that's where I lost

    def verifica_codigo_cliente():
    arquivo_cliente = open("arquivo_cliente.txt", "a+")
    codigos = []
    for row in arquivo_cliente:
        codigos.append(row)
    if codigos == []:
        return 1
    else:
        x = codigos[len]
        return codigos[x]
    


  • Fixing the function verifica_codigo_cliente()

    # Identação errada
    def verifica_codigo_cliente():
    # "a+" = read e append.A função só faz leitura,substitua por 'r'
    arquivo_cliente = open("arquivo_cliente.txt", "a+")
    codigos = []
    #Podemos ler apenas a última linha ao invés de iterar todo o arquivo
    for row in arquivo_cliente:
        codigos.append(row)
    if codigos == []:
        return 1
    else:
        #uso correto: x = len(codigos)
        x = codigos[len]
        return codigos[x]
    

    Rewrite function:

    def verifica_codigo_cliente(arquivo):
        try:
            arquivo_clientes = open(arquivo, 'r')
            ultima_linha = arquivo_clientes.readlines()[-1]
            #separa primeira coluna da ultima linha(separador=",")
            id = ultima_linha.split(",")[0]
            return id
        except:
            return 1
        finally:
            arquivo_clientes.close()
    

    Rewritten programme

    there is something I should do to improve this formatting, thank you for the comments

    Recreated your code using the module csv(that https://pt.stackoverflow.com/users/5878/anderson-carlos-woss mentioned). The format is the same as vc wanted to use,by which you have understood:

    • each data is separated by comma
    • a customer on each line
    • starts with a "id",which will increment as more customers are added

    file should be in txt, but if I structure it with comma after each given, will still work?

    CSV is pure text,it only saves in .txt rather than .csv. Any question is just ask!

    NOTE: Written for python3

    #!/usr/bin/python3
    import csv
    import os
    

    arquivo = "clientes.txt"

    def arquivo_existe():
    return os.path.isfile(arquivo)

    def proximo_id():
    with open(arquivo, 'r') as arquivo_clientes:
    reader = csv.reader(arquivo_clientes)
    ultima_linha = list(reader)[-1]
    id = ultima_linha[0]
    return (int(id)+1)

    def escreve_dados(id, nome, cpf, endereco, telefone):
    with open(arquivo, 'a') as arquivo_clientes:
    writer = csv.writer(arquivo_clientes)
    writer.writerow([id, nome, cpf, endereco, telefone])

    nome = input("Digite o nome do cliente: ")
    cpf = input("Digite o CPF do cliente: ")
    endereco = input("Digite o endereco do cliente: ")
    telefone = input("Digite o Telefone do cliente: ")
    if(arquivo_existe()):
    escreve_dados(str(proximo_id()), nome, cpf, endereco, telefone)
    else:
    escreve_dados(1, nome ,cpf, endereco, telefone)


Log in to reply
 


Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2