Reemplace la palabra de cuatro letras en python

Estoy tratando de escribir un progtwig que abra un documento de texto y reemplace las palabras de cuatro letras con * *. He estado jugando con este progtwig durante varias horas ahora. Parece que no puedo llegar a ninguna parte. Esperaba que alguien pudiera ayudarme con esto. Esto es lo que tengo hasta ahora. La ayuda es muy apreciada!

def censor(): filename = input("Enter name of file: ") file = open(filename, 'r') file1 = open(filename, 'w') for element in file: words = element.split() if len(words) == 4: file1 = element.replace(words, "xxxx") alist.append(bob) print (file) file.close() 

Aquí está la versión revisada, no sé si esto es mucho mejor.

 def censor(): filename = input("Enter name of file: ") file = open(filename, 'r') file1 = open(filename, 'w') i = 0 for element in file: words = element.split() for i in range(len(words)): if len(words[i]) == 4: file1 = element.replace(i, "xxxx") i = i+1 file.close() 

 for element in file: words = element.split() for word in words: if len(word) == 4: etc etc 

Este es el por qué:

diga que la primera línea de su archivo es ‘hola, mi nombre es john’ y luego para la primera iteración del bucle: element = 'hello, my name is john' y words = ['hello,','my','name','is','john']

Es necesario verificar lo que hay dentro de cada palabra, for word in words tanto, for word in words

También podría valer la pena tener en cuenta que en su método actual no presta atención a la puntuación. Anote la primera palabra en words arriba …

Para deshacerse de la puntuación en lugar de decir:

 import string blah blah blah ... for word in words: cleaned_word = word.strip(string.punctuation) if len(cleaned_word) == 4: etc etc 

Aquí hay una pista: len(words) devuelve el número de palabras en la línea actual, no la longitud de ninguna palabra en particular. Debe agregar un código que analice cada palabra de su línea y decidir si necesita ser reemplazado.

Además, si el archivo es más complicado que una simple lista de palabras (por ejemplo, si contiene caracteres de puntuación que deben conservarse), podría valer la pena usar una expresión regular para hacer el trabajo.

Puede ser algo como esto:

 def censor(): filename = input("Enter name of file: ") with open(filename, 'r') as f: lines = f.readlines() newLines = [] for line in lines: words = line.split() for i, word in enumerate(words): if len(word) == 4: words[i] == '**' newLines.append(' '.join(words)) with open(filename, 'w') as f: for line in newLines: f.write(line + '\n') 

Necesita reemplazar la letra w en w+ en la línea 4: file1 = open(filename, 'w') debe ser file1 = open(filename, 'w+') (también estaba trabajando en este proyecto, así que este era mi código)

 import os import time localtime = time.asctime( time.localtime(time.time()) ) a = input("What is your first name? ").title() b = input("And your last name? ").title() c = input("What is your e-mail adderess? ") d = input("And your phone number? ") f = input("When were you born? (02-01-1900 is 1 February 1900)") print(a) print(b) print(c) print(d) print(f) e = input("Is this correct? (Y\N) ") g = (a+"-"+b) if e == "Y" or "y": new_path = '/users/Pivo/registreren/%s.txt' % g new_days = open(new_path,'w+') new_days.write(localtime) new_days.write('\n') new_days.write(a) new_days.write(" ") new_days.write(b) new_days.write('\n') new_days.write(c) new_days.write('\n') new_days.write(d) new_days.write('\n') new_days.write(f) new_days.write('\n') new_days.write('\n') new_days.write('\n') new_days.write('\n') new_days.close() print("Okay, done!") if e == "N" or "n": os.startfile("C:/Users/Pivo/registreren/registreren.py") 
 def censor(filename): """Takes a file and writes it into file censored.txt with every 4-letterword replaced by xxxx""" infile = open(filename) content = infile.read() infile.close() outfile = open('censored.txt', 'w') table = content.maketrans('.,;:!?', ' ') noPunc = content.translate(table) #replace all punctuation marks with blanks, so they won't tie two words together wordList = noPunc.split(' ') for word in wordList: if '\n' in word: count = word.count('\n') wordLen = len(word)-count else: wordLen = len(word) if wordLen == 4: censoredWord = word.replace(word, 'xxxx ') outfile.write(censoredWord) else: outfile.write(word + ' ') outfile.close()