Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: eolh652 en 3 Octubre 2013, 23:36 pm



Título: escritura de multiples archivos en python
Publicado por: eolh652 en 3 Octubre 2013, 23:36 pm
Buenas Tardes

Espero puedan apoyarme con esta duda, saludos a todos

Dentro de mi servidor tengo una serie de archivos de log que se generan x tiempo, lo que yo necesito hacer es tomar esos archivos, ofuscar un campo determinado de cada uno de estos archivos, y una vez que lo hace se debe crear por cada archivo analizado otro archivo de salida en donde se muestre el contenido del archivo pero con el campo ofuscado y todo lo demas igual.

He hecho un script como este:
----------------------------------------------------------
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#

import re
import os
import glob
def rot47(s):
    x = []
    for i in xrange(len(s)):
        j = ord(s)
        if j >= 33 and j <= 126:
            x.append(chr(33 + ((j + 14) % 94)))
        else:
            x.append(s)
    return ''.join(x)

lineas2=0
list_of_files = glob.glob('/home/omar/pruebas_scripts/test_ofus/*.log')
for file_name in list_of_files:
  #for test in origen.readlines():
  origen = open(file_name, 'r')
  destino = open(file_name + ".txt", "w")
  for test in origen.readlines():
     split=test.split("|")
     lineas=test.replace(split[4],rot47(split[4]))
     lineas2 = lineas + 1
destino.writelines(lineas)
origen.close()
destino.close()
-----------------------------------------------------------

lo anterior lo realizo con rot47 para el ofuscado. El problema es que si el archivo origen tiene 4 lineas, en el archivo destino solo crea 1 y si hay mas archivos a generar se generan con 0 lineas, es decir, unicamente lee una linea del archivo en cuestion siendo q tiene más.

Esa sería mi consulta, espero puedan apoyarme y darme algunas sugerencias al respecto.

Muchas gracias, saludos a todos.


Título: Re: escritura de multiples archivos en python
Publicado por: Once en 4 Octubre 2013, 00:56 am
No sé cómo lograste correr ese código. Al error que te refieres se debe a que tienes mal identado justo donde cierras los dos archivos que deben estar al nivel del for más interno.

El código funcional quedaría así:
Código
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4.  
  5. import re
  6. import os
  7. import glob
  8. def rot47(s):
  9.    x = []
  10.    for i in xrange(len(s) - 1):
  11.        j = ord(s[i])
  12.        if j >= 33 and j <= 126:
  13.            x.append(chr(33 + ((j + 14) % 94)))
  14.        else:
  15.            x.append(s)
  16.    return ''.join(x)
  17.  
  18. #lineas2=""
  19. list_of_files = glob.glob('/home/omar/pruebas_scripts/test_ofus/*.log')
  20. for file_name in list_of_files:
  21.  #for test in origen.readlines():
  22.  origen = open(file_name, 'r')
  23.  destino = open(file_name + ".txt", "w")
  24.  for test in origen.readlines():
  25.     split = test.split("|")
  26.     lineas = test.replace(split[4],rot47(split[4]))
  27.     #lineas2 = lineas + 1
  28.     destino.writelines(lineas)
  29.  origen.close()
  30.  destino.close()
  31.  

Ten cuidado con las identaciones y la línea donde haces el replace

Saludos!


Título: Re: escritura de multiples archivos en python
Publicado por: eolh652 en 4 Octubre 2013, 01:09 am
Muchas gracias por la respuesta, de verdad que estaba batalle y batalle jeje. Ahora pondré más cuidado con la identación.

Ya con eso se solucionó :)

Saludos


Título: Re: escritura de multiples archivos en python
Publicado por: Softrix18 en 4 Octubre 2013, 14:06 pm
Hola, Buen Dia.

Amigo para lectura Y/O escritura de archivo usa with.

ejemplo.

Código
  1. for file_name in list_of_files:
  2.     with open(file_name, 'r') as origen, open(file_name + ".txt", "w") as destino:
  3.        for test in origen.readlines():
  4.            split = test.split("|")
  5.            lineas = test.replace(split[4],rot47(split[4]))
  6.            destino.writelines(lineas)
  7.  
  8.  
  9.