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:
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
Curtir tópico
+ 0
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 ?
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
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:
Lembrando que é um exemplo. Não conheço as funções e sintaxe da linguagem.
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
Clique aqui para fazer login e interagir na Comunidade :)