Digamos que tengo un archivo my_file, y quiero buscar una cierta palabra x en cada línea del archivo, y si la palabra existe, adjunte mi variable y al lado izquierdo y derecho de la palabra. Luego quiero reemplazar la línea anterior con la nueva línea modificada en my_new_file. ¿Cómo hago esto? Hasta ahora tengo:

output = open(omy_new_file, "w")

for line in open(my_file):

    if (" " + x + "") in line:
0
newarsenic 28 oct. 2017 a las 01:36

4 respuestas

La mejor respuesta
with open('inputfile.txt', 'r') as infile:
    with open('outfile.txt', 'w') as outfile:
        for line in infile.readlines():
            outfile.write(line.replace('string', y + 'string' + y)
0
Erik 27 oct. 2017 a las 22:42

Es difícil reemplazar una línea en un archivo mientras se lee, por la misma razón que es difícil modificar de forma segura una lista a medida que se repite.

Es mucho mejor leer el archivo, recopilar una lista de líneas y luego sobrescribir el original. Si el archivo es particularmente grande (de modo que no sería factible guardarlo todo en la memoria a la vez), puede escribir dos veces en el disco.

import tempfile

y = "***"
your_word = "Whatever you're filtering by"

with tempfile.TemporaryFile(mode="w+") as tmpf:
    with open(my_file, 'r') as f:
        for line in f:
            if your_word in line:
                line = f"{y}{line.strip()}{y}\n"
            tmpf.write(line)  # write to the temp file

    tmpf.seek(0)  # move back to the beginning of the tempfile

    with open(my_file, 'w') as f:
        for line in tmpf:  # reading from tempfile now
            my_file.write(line)
0
Adam Smith 27 oct. 2017 a las 22:51

Prueba esto:

with open("my_file", "r") as my_file:
    raw_data = my_file.read()

# READ YOUR FILE

new_data = raw_data.split("\n")

for line in new_data:

    if "sd" in line:

        my_new_line = "y" + line + "y"
        raw_data = raw_data.replace(line, my_new_line)


print(raw_data)
0
DRPK 27 oct. 2017 a las 22:47

Puedes probar esto:

y = "someword"
x = "target_string"
lines = [i.strip('\n') for i in open('filename.txt')]
final_lines = ["{}{}{}".format(y, i, y) if x in i else i for i in lines]
f = open(omy_new_file, "w")
for i in final_lines:
   f.write("{}\n".format(i))

f.close()
1
Ajax1234 27 oct. 2017 a las 22:40