Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sorteio de Rodízio Semanal de Funcionários usando a leitura de um arquivo

Utilizando o que foi ensinado na aula sobre leitura de arquivos, criei o código ( o correto é falar script??) abaixo:

import random
arquivo = open('funcionarios.txt', "r")
lista = []
for linha in arquivo:
    linha = linha.strip()
    lista.append((linha))
arquivo.close()
rodizio_semana = random.sample(lista, k=5)
print(rodizio_semana)

O programa rodou sem problemas, mas estou com algumas dúvidas com relação à aula. 1) Como usar o modo "a" para inserir novas palavras no meu arquivo original; 2) O arquivo texto e o arquivo-código precisam estar na mesma pasta que seja possível a abertura do mesmo no código? Ou pode estar em qualquer pasta do meu computador? 3) A função open abre qualquer tipo de arquivo?

2 respostas
solução!

Oii César, tudo bem com você?

Para inserir novas palavras no arquivo, você pode usar o modo "a+". Com ele, você conseguirá ler um arquivo já existente e adicionar novas palavras. Os modos permitidos para a abertura de um arquivo são:

image

Porém, quando abrimos um arquivo com o modo "a", o cursor será posicionado no final do arquivo.

image

Como o cursor está posicionado no final do arquivo, concorda que não terá dado algum para ler? Então, quando formos efetuar a leitura do arquivo, teremos que dizer para o Python que queremos que o cursor esteja no início e fazemos isso com o seek, passando como parâmetro o número 0. Ou seja, o cursor será posicionado na primeira letra do arquivo:

image

Agora, com o cursor posicionado na primeira letra do arquivo conseguiremos ler os dados que há para frente.

Tendo em vista isso, teremos que alterar pequenas coisas no seu código atual.

  • A primeira delas é mudar o modo de leitura "r" para "a+":
arquivo = open('funcionarios.txt', "a+")
  • Posterior isso, caso você deseje fazer a leitura dos dados que já existem no arquivo, terá que posicionar o cursor no início:
arquivo.seek(0)
  • E agora, caso queira adicionar novos dados, basta fazer arquivo.write("Novo Funcionário")

Código completo alterado:

import random
arquivo = open('funcionarios.txt', "a+")
arquivo.seek(0)
lista = []
for linha in arquivo:
    linha = linha.strip()
    lista.append((linha))
arquivo.write("Novo Funcionário\n")
arquivo.close()
rodizio_semana = random.sample(lista, k=5)
print(rodizio_semana)

O arquivo de texto e código não precisam estar na mesma pasta, podem estar em qualquer local do seu computador. E quando estiverem em pastas diferentes, você terá que passar o caminho completo de onde se encontra o arquivo. Exemplo:

open('/home/nadia/Development/forum/dados/funcionarios.txt', "a+")

A função open abrirá arquivos de texto e arquivos binários. Os arquivos de texto são estruturados com uma sequência de linhas, em que cada linha inclui uma sequência de caracteres. Um arquivo binário é qualquer tipo de arquivo que não seja um arquivo de texto. Devido à sua natureza, os arquivos binários podem ser processados ​​apenas por softwares que compreendem a estrutura do arquivo. Em outras palavras, eles devem ser softwares que podem ler e interpretar binários.

César, se houver ficado qualquer dúvida fique a vontade para perguntar. Estou a disposição. Abraços e bons estudos!

Muito obrigado Nádia, sempre tenho as melhores respostas com a sua ajuda.