How to get a specific data type from a text file

0

I have a text file, structured as follows

  • 1
  • Name
  • CPF
  • Address
  • Phone

I would like to know how I can get only the lines that contain integer, in this case the code (identified as 1), since I am trying to do an auto increment in python Note: there is something I should do to improve this formatting, thank the comments

Note: Write 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 got 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]
    
asked by anonymous 17.11.2017 / 23:15

1 answer

0

Correcting the 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]

Rewriting 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()

Re-written program

  

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

I rewrote your code using the csv module (which Anderson mentioned) .O format is the same as the one you wanted to use, so that implied:

  • Each data is separated by commas
  • one client on each line
  • starts with an "id", which increases as more customers are added
  

File should be in txt, but if I structure it with a comma after each die, will it still work?

CSV is pure text, it's just saving in .txt instead of .csv . Any doubt 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)
    
20.11.2017 / 00:41