Dúvida sobre a codificação no PyCharm
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:
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
Curtidas 0
Respostas
Leticia Lima
26/03/2023
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 ?
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")
GOSTEI 0
Arthur Heinrich
26/03/2023
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.
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:
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.
GOSTEI 0