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)