Estoy creando un programa para actualizar un archivo de texto, que tiene una lista de las ciudades:
New York City
New York
USA
Newark
New Jersey
USA
Toronto
Ontario
Canada
Si quisiera eliminar los detalles de Newark usando una escritura del golpe, no puedo hacer esto:
sed -i "/Newark/,+3d" test.txt
Y eso me llevarse el siguiente:
New York City
New York
USA
Toronto
Ontario
Canada
Sin embargo, me gustaría hacer esto en Python, y estoy teniendo problemas encontrar la manera de eliminar las siguientes líneas, después de la línea de Newark. Puedo eliminar Newark:
with open('test.txt') as oldfile, open('test2.txt', 'w') as newfile:
for line in oldfile:
if not "Newark" in line:
newfile.write(line)
os.remove('test.txt')
os.rename('test2.txt', 'test.txt')
Pero esto no hace nada para las dos líneas restantes, y crea un nuevo archivo a continuación, tengo que usar para reemplazar el archivo original.
- ¿Cómo puedo ir sobre imitando la funcionalidad del comando sed con Python?
- ¿Hay alguna manera de hacer un archivo de edición, así que no tengo que crear y reemplazar el archivo cada vez que tengo que eliminar de ella?
Con un contador? Aquí está:
with open('test.txt') as oldfile, open('test2.txt', 'w') as newfile:
skip = 0
for line in oldfile:
if "Newark" in line:
skip = 3
elif skip > 0:
skip = skip - 1
else:
newfile.write(line)
Editar:
Sólo respondí a la primera pregunta. fileinput edición de archivos de soporte, por favor, eche un vistazo aquí: Cómo buscar y reemplazar texto en un archivo? Por cierto, yo recomendaría también en el lugar , ya que no secuestrar stdout