Fórum Dúvida sobre a codificação no PyCharm #619720

26/03/2023

0

Estava estudando como remover palavras em arquivos usando Python. Eu adicionava duas palavras no arquivo, uma normal e a outra rasurada. Antes de realizar a remoção, ao abrir o arquivo, as palavras ficavam normais, porém após a remoção da palavra não rasurada, ficava uma linha em branco e a palavra com rasura ficava bugada. Já mudei o código e a codificação do PyCharm várias vezes, mas continua assim. Alguém sabe o que devo fazer?

Essa foi minha última tentativa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import codecs
import unicodedata
 
texto = "Rasurado"
texto_normalizado = unicodedata.normalize(''NFKD'', texto)
 
texto_riscado = ''.join([''\u0336{}''.format(c) for c in texto_normalizado])
 
with codecs.open("test.txt", "w", encoding="utf-8-sig") as texto_inicial:
    texto_inicial.write(texto_normalizado)
 
 
with codecs.open("test.txt", "a", encoding="utf-8-sig") as texto_inicial:
    texto_inicial.write(f"\n")
 
with codecs.open("test.txt", "r", encoding="utf-8-sig") as file:
    print(file.read())
 
with codecs.open("test.txt", "r+", encoding="utf-8-sig") as file:
    content = file.readlines()
 
    for line in range(len(content)):
        if texto_normalizado in content[line]:
            content[line] = content[line].replace(texto_normalizado, '')
 
    file.seek(0)
    file.write(''.join(content))
Ryan Santos

Ryan Santos

Responder

Posts

07/12/2023

Leticia Lima

Eu acho que o problema pode ser no caractere de rasura ('\\u0336') no momento da escrita no seu arquivo, de como o PyCharm está interpretando esse caractere.
Aqui está uma alternativa de como eu tentaria resolver isso.

PS: já tentou usar outra IDE ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import codecs
import unicodedata
 
def rasurar_palavra(palavra):
    texto_normalizado = unicodedata.normalize('NFKD', palavra)
    texto_riscado = ''.join(['\\u0336{}'.format(c) for c in texto_normalizado])
    return texto_normalizado, texto_riscado
 
def remover_palavra_arquivo(nome_arquivo, palavra):
    texto_normalizado, texto_riscado = rasurar_palavra(palavra)
 
    # Escreve a palavra riscada no arquivo
    with codecs.open(nome_arquivo, "w", encoding="utf-8-sig") as arquivo:
        arquivo.write(texto_riscado)
 
    # Adiciona uma linha em branco
    with codecs.open(nome_arquivo, "a", encoding="utf-8-sig") as arquivo:
        arquivo.write("\\n")
 
    # Lê o conteúdo do arquivo
    with codecs.open(nome_arquivo, "r", encoding="utf-8-sig") as arquivo:
        print(arquivo.read())
 
    # Remove a palavra não riscada do arquivo
    with codecs.open(nome_arquivo, "r+", encoding="utf-8-sig") as arquivo:
        content = arquivo.readlines()
 
        for line in range(len(content)):
            if texto_normalizado in content[line]:
                content[line] = content[line].replace(texto_normalizado, '')
 
        arquivo.seek(0)
        arquivo.write(''.join(content))
 
# Exemplo de uso
remover_palavra_arquivo("test.txt", "Rasurado")
Responder

Gostei + 0

07/12/2023

Arthur Heinrich

Acho que seu problema está nesse trecho de código

1
2
3
for line in range(len(content)):
    if texto_normalizado in content[line]:
        content[line] = content[line].replace(texto_normalizado, '')


Se o "texto_normalizado" aparece na linha do arquivo, você está substituindo o conteúdo da linha, removendo o "texto_normalizado".

Imagine que sua linha contém o texto "picolé de morango" e o seu texto normalizado vale "morango". Como resultado sua linha vai aparecer como "picolé de ". Porém, se o texto normalizado coincide com a linha toda, a linha ficará em branco.

Se você quer que linhas em branco após a substituição sejam eliminadas, precisará excluí-las do arquivo. Algo como:

1
2
3
4
5
for line in range(len(content)):
    if texto_normalizado in content[line]:
        content[line] = content[line].replace(texto_normalizado, '')
        if (content[line] == ''):
            content.delete(line)


Lembrando que é um exemplo. Não conheço as funções e sintaxe da linguagem.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar