es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Como traductor de español especializado en documentos de TI, puedo ayudarlo a traducir el texto siguiente en español. Sin embargo, para brindar una traducción precisa, necesitaría conocer los términos específicos o contexto relacionado con “multiple different strings” y “unknown”. A continuación, presentaré una traducción con un texto genérico para ilustrar el proceso: “Reemplace múltiples cadenas diferentes por ‘desconocido’ dentro del texto.” Si puede proporcionar más detalles o ejemplos específicos, estaré encantado de ayudarlo con una traducción más precisa.

Estoy tratando de reemplazar todas las líneas múltiples en un archivo de texto que comienzan con: setAttr “.os”
y terminan con: setAttr “.sf”.

Dado que las líneas entre el inicio y el final son desconocidas y variables…

El problema es que solo reemplaza una aparición, si la variable old encuentra resultados diferentes.

firstFrame = str(80)
lastFrame = str(200)

begin = ‘setAttr “.os” ‘
ending = ‘setAttr “.sf” ‘

new = ””setAttr “.os” ”’+ firstFrame +”’;
setAttr “.oe” ”’+ lastFrame +”’;
setAttr “.ss” ”’+ firstFrame +”’;
setAttr “.se” ”’+ lastFrame +”’;
”””

with open(‘pathToFile.txt’, ‘r’) as read_stream:
file1 = read_stream.read()
f1_start = file1.index(begin)
f1_end = file1.index(ending, f1_start)
old = file1[f1_start:(f1_end+18)]
file1 = file1.replace(old, new )
with open(‘pathToFile.txt’, ‘w’) as read_stream:
read_stream.write(file1)

Creo que mi error está en la línea:
old = file1[f1_start:(f1_end+18)]
Pero no sé cómo hacer que esta línea sea variable.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para hacer la línea variable, puedes usar un bucle para seguir buscando la siguiente aparición de begin y ending hasta que no haya más coincidencias. Aquí tienes un fragmento de código actualizado que puedes probar:

    firstFrame = str(80)
    lastFrame = str(200)
    
    begin = 'setAttr ".os" '
    ending = 'setAttr ".sf" '
    
    new = '''setAttr ".os" ''' + firstFrame + ''';
    setAttr ".oe" ''' + lastFrame + ''';
    setAttr ".ss" ''' + firstFrame + ''';
    setAttr ".se" ''' + lastFrame + ''';
    '''
    
    with open('rutaAlArchivo.txt', 'r') as read_stream:
        file1 = read_stream.read()
        while True:
            f1_start = file1.find(begin)
            if f1_start == -1:
                break
            f1_end = file1.find(ending, f1_start)
            old = file1[f1_start:(f1_end+len(ending))] # incluir la longitud de ending en el fragmento
            file1 = file1.replace(old, new )
    
    with open('rutaAlArchivo.txt', 'w') as write_stream:
        write_stream.write(file1)
    

    El bucle while seguirá buscando la siguiente aparición de begin y ending hasta que no haya más coincidencias en el archivo. Luego, escribe el texto actualizado de nuevo en el archivo.

Comments are closed.