how to take a single text from a specific line in a python txt file

Asked

Viewed 44 times

-1

I am making a mini system to register products and change their quantities, but I am dealing with a problem of deleting a part of the text in a certain line, for example: '00000 1' to '00000 4'(product code and its quantity!). I’ll leave the code with a line marked so you’ll understand better.

from random import randint

while True:
    print('1 - ver lista de produtos\n2 - alterar quantidade\n3 - adicionar produto')
    opcao = int(input('opção: '))
    if opcao == 1:
        with open('NAME', 'r', encoding="utf8") as f:
            for i in f:
                print(i)

    elif opcao == 2:
        produto = input('qual o codigo do produto?\n>')
        with open('NAME', 'rt+', encoding="utf8") as f:
            for i in f:
                if i[:5] == produto:
                    print(f'a quantidade do produto é: {i[6:]}')
                    qtd = str(input('para quantos deseja alterar?\n>'))

                    # é aqui onde eu preciso colocar o código mas não sei como faço ele

                else:
                    continue

    elif opcao == 3:
        a = randint(10000, 99999)
        print(f'o código do produto é: {a}')
        with open('NAME', 'r', encoding="utf8") as f:
            for i in f:
                if i[:5] == a:
                    a = randint(10000, 99999)
                else:
                    pass
            quantidade = int(input('qual a quantidade do produto?\n>'))
        open('NAME', 'at+').write(f'{a} ')
        open('NAME', 'at+').write(f'{quantidade}')
        open('NAME', 'at+').write('\n')

    else:
        pass

1 answer

0


Possible solution below:

from random import randint

while True:
    print('1 - ver lista de produtos\n2 - alterar quantidade\n3 - adicionar produto')
    opcao = int(input('opção: '))
    if opcao == 1:
        with open('NAME', 'r', encoding="utf8") as f:
            for i in f:
                print(i)

    elif opcao == 2:
        produto = input('qual o codigo do produto?\n>')
        with open('NAME', 'rt+', encoding="utf8") as f:
            # Lê todas as linhas do arquivo de antemão
            linhas = f.readlines() 
            for indice, linha in enumerate(linhas): 
                if linha[:5] == produto:
                    print(f'a quantidade do produto é: {linha[6:]}')
                    qtd = str(input('para quantos deseja alterar?\n>'))

                    # Apenas linha = f'{linha[:5]} {qtd}\n' não modificaria a lista
                    linhas[indice] = f'{linha[:5]} {qtd}\n'

                else:
                    continue
            # Reposiciona o ponteiro do arquivo pro início dele. Caso contrário estaria escrevendo as linhas ao final dele
            f.seek(0)
            f.writelines(linhas)

    elif opcao == 3:
        a = randint(10000, 99999)
        print(f'o código do produto é: {a}')
        with open('NAME', 'r', encoding="utf8") as f:
            for i in f:
                if i[:5] == a:
                    a = randint(10000, 99999)
                else:
                    pass
            quantidade = int(input('qual a quantidade do produto?\n>'))
        open('NAME', 'at+').write(f'{a} ')
        open('NAME', 'at+').write(f'{quantidade}')
        open('NAME', 'at+').write('\n')

    else:
        pass

It is not the fastest solution as it writes the entire file again.

  • Thank you very much man you helped me a lot, the code works yes, I had thought about it but I had no idea how to do so I gave up this option, but thank you!

Browser other questions tagged

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