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.

Reemplazo de cadena en Python, en secuencia, por índice.

Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzcas el código y el resultado en markdown:

Soy un principiante que acaba de comenzar a aprender Python desde YouTube. Estoy tratando de hacer un programa para reemplazar los viejos números de cadena con nuevos números de cadena y enfrentando problemas al reemplazar números. Quiero reemplazar por índice (¿cuál es su término técnico (no lo sé)). Puede ir en una dirección o por índice.

Mi cadena es = (01010110110111011110111101111011110101101101101011011011010101010101010101011101110101110111101)

y quiero reemplazar 010 con 0, 0110 con 00, 01110 con 000 y 011110 con 0000,

por lo que mi cadena de salida reemplazada será así…

(01 0011 0001111 00001111 00001 0011 001 0011 001 01 01 01 01 000111 0111 00001)

Según mi código, está tardando demasiado tiempo (casi más de 2-3 horas para solo un archivo de 8 MB).

con open(‘1.txt’, ‘r’) como f:
newstring = ”

old_list = ['010', '0110', '01110', '011110']
new_list = ['0', '00', '000', '0000']

while True:
    try:
        chunk = f.read()

    except:
        print('Error mientras se abre el archivo')
    if chunk:

        n = len(chunk)

        i = 0
        while i < n:
            flag = False
            for j in range(6, 2, -1):

                if chunk[i:i + j] in old_list:
                    flag = True
                    index = old_list.index(chunk[i:i + j])
                    newstring = newstring + new_list[index]

                    i = i + j

                    break
            if flag == False:
                    newstring = newstring + chunk[i]
                    i = i + 1
                    newstring=''.join((newstring))

        else:
            try:
                f = open('2xx.txt', 'a')
                f.write("01"+newstring)
                f.close()

            except:
                print('Error al escribir en el archivo')

            break
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    El término técnico para reemplazar una parte de una cadena con otra parte es “reemplazo de cadena”. En su caso específico, está tratando de reemplazar ciertas subcadenas de la cadena de entrada con reemplazos específicos.

    En cuanto al problema de rendimiento que enfrenta, parece que su implementación es ineficiente ya que tarda mucho tiempo en procesar un archivo de 8MB. Una posible razón para el rendimiento lento es el bucle anidado que está utilizando para buscar subcadenas coincidentes.

    Para optimizar el proceso, puede intentar usar la función replace() del módulo str, ya que está diseñada para reemplazar de manera eficiente subcadenas en una cadena.

    Aquí hay una versión actualizada de su código que usa la función replace():

    old_list = ['010', '0110', '01110', '011110']
    new_list = ['0', '00', '000', '0000']
    
    with open('1.txt', 'r') as f:
        input_string = f.read()
    
    for i, old_pattern in enumerate(old_list):
        input_string = input_string.replace(old_pattern, new_list[i])
    
    try:
        with open('2xx.txt', 'w') as f:
            f.write(f"01{input_string}")
    except IOError:
        print('Error al escribir en el archivo')
    

    Este código lee el archivo de entrada en una cadena y luego usa la función replace() para reemplazar cada subcadena antigua por su correspondiente nueva subcadena. La cadena resultante se escribe en el archivo de salida.

    El uso de replace() en lugar del bucle anidado reduce drásticamente el tiempo de procesamiento.

    Tenga en cuenta que la cadena de salida en su pregunta contiene espacios entre las subcadenas reemplazadas. Si desea agregar esos espacios, puede modificar el código para insertarlos después de cada reemplazo.

Comments are closed.