escritura de multiples archivos en python

Iniciado por eolh652, 3 Octubre 2013, 23:36 PM

0 Miembros y 1 Visitante están viendo este tema.

eolh652

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.

Once

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 (python) [Seleccionar]

#!/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!

eolh652

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

Softrix18

Hola, Buen Dia.

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

ejemplo.

Código (python) [Seleccionar]

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)