Python - unir txt cuando se actualiza

   
Vista:

unir txt cuando se actualiza

Publicado por David (14 intervenciones) el 31/08/2015 03:32:25
Buenas, tengo dos archivos de texto (.txt) que se van actualizando solos (se agrega una nueva línea al final del documento) pero de forma aleatoria y me gustaría hacer un .txt donde aparezca en un solo fichero estos dos .txt, de tal modo que cuando un fichero se actualiza también lo haga el que los unifica. Igual es algo muy simple, pero no se me ocurre cómo podría hacerlo, ¿podéis ayudarme?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

unir txt cuando se actualiza

Publicado por xve (1229 intervenciones) el 31/08/2015 08:14:49
Hola David, no se si tienen que tener un orden en concreto, pero si lo quieres pegar uno detras del otro, puedes hacerlo con este simple código:

1
2
3
4
5
6
filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
            for line in infile:
                outfile.write(line)

Si los archivos con pequeños, puede que no haga falta recorrer su contenido...
1
2
3
4
5
filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
    for fname in filenames:
        with open(fname) as infile:
            outfile.write(infile.read())

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

unir txt cuando se actualiza

Publicado por David (14 intervenciones) el 31/08/2015 15:22:33
No es exactamente lo que quería, voy a ver si consigo expresarme un poco mejor que siempre lo hago fatal.

Mi objetivo es tener un script que se ejecute de fondo, de tal modo que si uno de esos dos ficheros con los que estoy trabajando se añade una línea al final de documento automáticamente se añada en el fichero unificado. No importa el orden inicial de integración de los ficheros, lo que si importa es que conforme un fichero se actualice que también lo haga en el fichero unificado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

unir txt cuando se actualiza

Publicado por xve (1229 intervenciones) el 31/08/2015 20:34:08
Hola David, la única manera que se me ocurre, es contando constantemente las lineas de dichos ficheros, pero no se si es del todo óptimo... yo lo revisaría cada segundo o cada dos segundos...

Haber si te sirve este código, lo que hace es revisar cada 5 segundos, y si alguno de los dos a variado el numero de lineas, genera nuevamente el archivo file con el contenido de los otros dos archivos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import commands
import time
 
def getLines():
	linesFileA=commands.getoutput("wc -l file1.txt | awk {'print $1'}")
	linesFileB=commands.getoutput("wc -l file2.txt | awk {'print $1'}")
	return [linesFileA,linesFileB]
 
[linesFileA,linesFileB]=getLines()
 
while True:
	[actualFileA,actualFileB]=getLines()
	if actualFileA!=linesFileA or actualFileB!=linesFileB:
		filenames = ['file1.txt', 'file2.txt']
		with open('file', 'w') as outfile:
			for fname in filenames:
				with open(fname) as infile:
					for line in infile:
						outfile.write(line)
	time.sleep(5)

Coméntanos si te sirve, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

unir txt cuando se actualiza

Publicado por David (14 intervenciones) el 01/09/2015 22:10:04
Me sirve, pero no. Me explico, es mas o menos lo que buscaba pero no termina de hacerlo como yo quería. El problema es que al leer de 2 ficheros, el contenido del segundo fichero siempre aparece el último en el fichero unificado, y lo que me interesa es que lo último del fichero unificado sea la última línea añadida a cualquiera de los dos ficheros. Voy a poner un ejemplo:

El fichero A y el fichero B han sido copiados en el fichero Final, un tiempo después el fichero A se modifica y se añade una nueva línea, entonces el fichero Final añade esa nueva línea del fichero A al final del fichero Final.

Estoy estudiandome tu código y viendo que hacen las instrucciones, porque es la primera vez que programo Python, y no es tan parecido a C como pensaba. Me sabe mal que te maree tanto y que me des las soluciones tan directamente, pero en Python me pierdo mucho >_<.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar