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.
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í:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import os
import glob
def rot47(s):
x = []
for i in xrange(len(s) - 1):
j = ord(s[i])
if j >= 33 and j <= 126:
x.append(chr(33 + ((j + 14) % 94)))
else:
x.append(s)
return ''.join(x)
#lineas2=""
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()
Ten cuidado con las identaciones y la línea donde haces el replace
Saludos!
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
Hola, Buen Dia.
Amigo para lectura Y/O escritura de archivo usa with.
ejemplo.
for file_name in list_of_files:
with open(file_name, 'r') as origen, open(file_name + ".txt", "w") as destino:
for test in origen.readlines():
split = test.split("|")
lineas = test.replace(split[4],rot47(split[4]))
destino.writelines(lineas)