Python - Strings and files

Asked

Viewed 218 times

-1

I’m starting to learn Python files. What suggestions would you give to improve the code and make it more beautiful or smaller? usuarios.txt

"""
A ACME Inc., uma empresa de 500 funcionários, está tendo problemas de espaço em
disco no seu servidor de arquivos. Para tentar resolver este problema, o
Administrador de Rede precisa saber qual o espaço ocupado pelos usuários, e
identificar os usuários com maior espaço ocupado. Através de um programa,
baixado da Internet, ele conseguiu gerar o seguinte arquivo, chamado
"usuarios.txt":

alexandre       456123789
anderson        1245698456
antonio         123456456
carlos          91257581
cesar           987458
rosemary        789456125

Neste arquivo, o nome do usuário possui 15 caracteres. A partir deste arquivo,
você deve criar um programa que gere um relatório, chamado "relatório.txt", no
seguinte formato:

ACME Inc.               Uso do espaço em disco pelos usuários
------------------------------------------------------------------------
Nr.  Usuário        Espaço utilizado     % do uso

1    alexandre       434,99 MB             16,85%
2    anderson       1187,99 MB             46,02%
3    antonio         117,73 MB              4,56%
4    carlos           87,03 MB              3,37%
5    cesar             0,94 MB              0,04%
6    rosemary        752,88 MB             29,16%

Espaço total ocupado: 2581,57 MB
Espaço médio ocupado: 430,26 MB

O arquivo de entrada deve ser lido uma única vez, e os dados armazenados em
memória, caso sejam necessários, de forma a agilizar a execução do programa.
A conversão da espaço ocupado em disco, de bytes para megabytes deverá ser feita
através de uma função separada, que será chamada pelo programa principal.
O cálculo do percentual de uso também deverá ser feito através de uma função,
que será chamada pelo programa principal.
"""
#1048576
relatorio = open('relatorio.txt', 'w')
arquivo = open('usuarios.txt')

total = cont = 0
lista = []
nomes = []

def main(relatorio):
    global total, lista, nomes

    conversor()
    porcentagem = percentual()

    relatorio.write('ACME Inc.               Uso do espaço em disco pelos usuários\n')
    relatorio.write('------------------------------------------------------------------------\n')
    relatorio.write('Nr.  Usuário        Espaço utilizado     % do uso\n')
    relatorio.write('\n')

    for i in range(cont):
        relatorio.write('%i    %s%7.2fMB%19.2f%%'%(i+1, nomes[i], lista[i], porcentagem[i]))
        relatorio.write('\n')

    media = total/6
    espaço = (len('%.2f'%total) - len('%.2f'%media))*' '
    relatorio.write('\n')
    relatorio.write('Espaço total ocupado: %.2fMB\n'%(total))
    relatorio.write('Espaço medio ocupado: %s%.2fMB'%(espaço ,media))

    relatorio.close()


def conversor():
    global lista, nomes, total, cont

    while True:
        x = arquivo.readline()
        if x == '':
            break

        nomes.append(x[:16])
        y = x[16:]
        lista.append(int(y)/1048576)
        total += int(y)
        cont += 1

    total/= 1048576


def percentual():
    global total, lista
    porcentagem = []
    for i in range(cont):
        porcentagem.append(lista[i]*100/total)

    return porcentagem

main(relatorio)
arquivo.close()
  • I’m not sure what you meant by making it more beautiful, but as the colleague above said, use the concept ofwith open(“hello.text”, “r”) as f: It’s a good start. Here’s a site that has great instructions to get you started: https://www.pythonforbeginners.com/files/reading-and-writing-files-in-python

1 answer

0

Use the concept of with open(file) as f: #read or write operations is safer for handling exceptions and will also make the code a little cleaner.

In the documentation you have clear information about this: https://docs.python.org/3/tutorial/inputoutput.html

Browser other questions tagged

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