Ver la versión completa : [Ayuda] Renombrar textos
nintiendo1
15/09/2014, 23:35
Hola,
es una duda un poco difícil de explicar, por eso quizás no he encontrado la solución en google. Es una tontería, por lo que supongo que existirá solución para esto, pero no la encuentro.
Mi duda es que yo tengo el siguiente texto:
AAA BBB CCC DDD EEE FFF GGG
y quiero que me lo deje así:
ZZZ { BBB } { CCC } { DDD } { EEE } { YYY }
Lo más sencillo sería hacer esta conversión a mano, pero cuando tengo estos textos 10-20 veces todos los días, pues es un coñazo renombrarlos a mano, por lo que agradezco si existe un programa o algo que yo pegando el texto original a mano, me haga esa conversión (o por ejemplo en el Bloc de Notas o el Word si lo hace).
Los BBB CCC DDD EEE FFF GGG son datos variables (varían de una vez a otra), y los ZZZ e YYY son datos fijos que yo proporciono de antemano.
No sé si me he explicado bien, espero que sí xD
Tengo Windows 8.1
Saludos y gracias.
¿Un programita simple con python por ejemplo?
http://www.maestrosdelweb.com/editorial/guia-python-cadenas-de-texto/
nintiendo1
16/09/2014, 00:35
¿Un programita simple con python por ejemplo?
http://www.maestrosdelweb.com/editorial/guia-python-cadenas-de-texto/
Lo he estado mirando por encima, y más o menos es esto lo que yo quiero:
División en trozos
Supongamos que tenemos una cadena que contiene una fecha, en formato día/mes/año. Podemos obtener fácilmente cada trozo de la cadena (cada dato de la fecha) utilizando el método split. Este método divide a la cadena en trozos, cortando cada trozo en cada ocurrencia de un separador, que se pasa como argumento.
>>> fecha = '17/05/2012'
>>> datos = fecha.split('/') # separamos la cadena por /
>>> print datos
['17', '05', '2012'] # la lista contiene los trozos, sin el separador
>>> print 'día:', datos[0], 'mes:', datos[1], 'año:', datos[2]
día: 17 mes: 05 año: 2012
Si no le damos a split un separador, la cadena será separada por espacios. Esto puede servir para obtener todas las palabras de una oración:
>>> "¡La mejor Guía de Python está en Maestros del Web!".split()
['¡La', 'mejor', 'Guía', 'de', 'Python', 'está', 'en', 'Maestros', 'del', 'Web!']
La pregunta sería, ¿como se hace ese programita?
Lo digo porque no tengo ni idea de programación, vamos, que no se compilar ni un hola mundo.
Saludos y gracias
y AAA y GGG son siempre AAA y GGG? o tambien van cambiando?
porque si AAA y GGG son ctes, como sereno te ha dicho, un programilla en python te ahorra tiempo.
Tendrias que:
1.- buscar la cadena AAA
2.- copiar lo que hay a partir de AAA
3.- sacar la subcadena hasta GGG (sin que incluya esta)
4.- preparar una cadena resultado con ZZZ {
5.- subdividir la cadena BBB CCC DDD EEE por espacio para que te de BBB
6.- encadenarselo a ZZZ { -> ZZZ {BBB
7.- encadenarle } { -> ZZZ{BBB} {
8.- repite hasta la saciedad
-----Actualizado-----
en python no necesitas compilar.... XD
nintiendo1
16/09/2014, 00:51
y AAA y GGG son siempre AAA y GGG? o tambien van cambiando?
porque si AAA y GGG son ctes, como sereno te ha dicho, un programilla en python te ahorra tiempo.
Tendrias que:
1.- buscar la cadena AAA
2.- copiar lo que hay a partir de AAA
3.- sacar la subcadena hasta GGG (sin que incluya esta)
4.- preparar una cadena resultado con ZZZ {
5.- subdividir la cadena BBB CCC DDD EEE por espacio para que te de BBB
6.- encadenarselo a ZZZ { -> ZZZ {BBB
7.- encadenarle } { -> ZZZ{BBB} {
8.- repite hasta la saciedad
-----Actualizado-----
en python no necesitas compilar.... XD
AAA sí es constante, sin embargo GGG no es constante, de hecho FFF y GGG pueden no aparecer.
La otra duda sería como se usa python :lol2:
Saludos.
Pues la verdad es que sin saber bien lo que tiene que hacer es un poco complicado :D
Solo te puedo recomendar que mires algún pequeño tutorial de python (es muy sencillo y hay un montón)
A modo de ejemplo un cutre programa sería este:
cadena = 'AAA BBB CCC DDD'
inicio = 'ZZZ'
final = 'YYY'
separado = cadena.split()
conCorchetes = ' } { '.join(separado)
cadenaFinal = inicio + ' { ' + conCorchetes + ' } { ' + final + ' }'
print (cadenaFinal)
Instala python (en linux ya está)
Copia el código en un archivo con nombre "programa.py" por ejemplo y ejecútalo.
Más o menos creo que se parece a lo que necesitas.
bueno, si sabes las cantidad de separaciones que tienes (BBB CCC DDD EEE aparecen siempre, entonces si) tampoco necesitas FFF y GGG
nintiendo1
16/09/2014, 01:53
Pues la verdad es que sin saber bien lo que tiene que hacer es un poco complicado :D
Solo te puedo recomendar que mires algún pequeño tutorial de python (es muy sencillo y hay un montón)
A modo de ejemplo un cutre programa sería este:
cadena = 'AAA BBB CCC DDD'
inicio = 'ZZZ'
final = 'YYY'
separado = cadena.split()
conCorchetes = ' } { '.join(separado)
cadenaFinal = inicio + ' { ' + conCorchetes + ' } { ' + final + ' }'
print (cadenaFinal)
Instala python (en linux ya está)
Copia el código en un archivo con nombre "programa.py" por ejemplo y ejecútalo.
Más o menos creo que se parece a lo que necesitas.
He instalado python, he creado ese archivo, pero cuando lo ejecuto, se me abre un comando del cmd, y se me cierra al segundo, sin poder ver nada.
------
Mira, os dejo un ejemplo de lo que quiero.
Quiero algo, que al yo meter por ejemplo:
Coche fff qq eee vfvvv gbdg gh6rhyh6
Coche bghbf gbgb gbbgf rerer 4545 vfvffv
Coche trtertr bgbgbg gfgfd fghhj
Coche hy6i76 ddnbn tgggjhjgh 7ytyuy
Me saque lo siguiente:
Moto { fff } { qq } { eee } { vfvvv } { 2 }
Moto { bghbf } { gbgb } { gbbgf } { rerer } { 2 }
Moto { trtertr } { bgbgbg } { gfgfd } { fghhj } { 2 }
Moto { hy6i76 } { ddnbn } { tgggjhjgh } { 7ytyuy } { 2 }
No sé si así queda más claro con este ejemplo lo que quiero.
Saludos.
lanza el script desde el cmd
nintiendo1
16/09/2014, 02:10
lanza el script desde el cmd
Ok, gracias, ya lo he conseguido.
Sin embargo, el script de Sereno le faltan cosas como:
- Que me ignore la parte AAA y no la incluya en el resultado final.
- Que en caso de haber FFF GGG los ignore y no los incluya en el resultado final.
- Que sea capaz de tratar varias lineas a la vez, porque si tengo que ponerme a pegar el código por cada línea me da algo. Lo suyo sería que yo las pegase en un .txt, y ese script de python abriese ese .txt, procesase todas esas lineas, y que me generase otro .txt con los resultados de todas esas líneas.
Si es capaz de hacer todo eso, ya sería perfecto (sí, se que quizás pido mucho xD).
Saludos.
Voy a ciegas, pero creo que esto te servira.
https://docs.python.org/2/library/string.html#string-functions
- string.lstrip es tu amigo, te quitaria el AAA
- ignorar FFF y GGG es condicional. Deberias usar string.split con el parametro maxsplit = 4 para quitar FFF y GGG si existen. Y luego string.join (o .join como en el ejemplo) para unirlos
- Para la primera prueba, que lo haga para cadenas simples. Cuando ya te funcione bien con cualquier cadena, puede seguir adelante. Haz que abra un fichero (txt) en modo texto y busque con string.find todas las ocurrencias AAA y les aplique lo anterior.
En programacion hay una regla muy importatnte: divide y venceras. Cuanto mas simples sean las cosas a hacer, mas facil es programar. Luego si eso puedes ir encadenando acciones, o complicandolas mas. Pero para lo que tu quieres, primero, empieza por una cadena y luego ya lo haces para un texto completo.
Nathrezim
16/09/2014, 09:28
awk 'BEGIN{FS=" "; OFS=FS}{print $1,"{",$2,"}","{",$3,"}","{",$4,"}","{",$5,"}"}'
Ejemplo:
echo 'Coche fff qq eee vfvvv gbdg gh6rhyh6' | awk 'BEGIN{FS=" "; OFS=FS}{print $1,"{",$2,"}","{",$3,"}","{",$4,"}","{",$5,"}"}'
Coche { fff } { qq } { eee } { vfvvv }
Lo puedes usar con un fichero de entrada, como parámetro al final del awk y redirigir la respuesta a otro fichero con el carácter > y un nombre de fichero.
Ejemplo:
awk 'BEGIN{FS=" "; OFS=FS}{print $1,"{",$2,"}","{",$3,"}","{",$4,"}","{",$5,"}"}' fichero_original.txt > fichero_salida.txt
PD: awk FTW!!!1!
nintiendo1
16/09/2014, 11:10
echo 'Coche fff qq eee vfvvv gbdg gh6rhyh6' | awk 'BEGIN{FS=" "; OFS=FS}{print $1,"{",$2,"}","{",$3,"}","{",$4,"}","{",$5,"}"}'
He instalado gawk en Windows, lo he abierto en cmd, y he pegado:
echo 'Coche fff qq eee vfvvv gbdg gh6rhyh6' | awk 'BEGIN{FS=" "; OFS=FS}{print $1,"{",$2,"}","{",$3,"}","{",$4,"}","{",$5,"}"}'
Sin embargo, no funciona y me dice:
awk: 'BEGIN{FS= ;
awk: ^ invalid char ''' in expresion
Entonces he probado sin ' a ver si funcionaba, poniendo:
echo Coche fff qq eee vfvvv gbdg gh6rhyh6 | awk BEGIN{FS=" "; OFS=FS}{print $1,"{",$2,"}","{",$3,"}","{",$4,"}","{",$5,"}"}
Pero me salta el siguiente error:
awk: BEGIN{FS= ;
awk: ^ syntax error
awk: cmd. line:1: BEGIN{FS= ;
awk: cmd. line:1: ^ unexpected newline or end of string
errcount: 2
¿Soluciones?
Saludos y gracias.
Nathrezim
16/09/2014, 11:19
Parece que te dan problemas los quote de windows, prueba a escaparlos con el backslash a ver, tal que asi:
awk BEGIN{FS=\" \"; OFS=FS}{print $1,\"{\",$2,\"}\",\"{\",$3,\"}\",\"{\",$4,\"}\",\"{\",$5,\"}\"}
PD: Si no te va y no tienes acceso a una máquina Unix puede instalarte Cygwin, te proporciona una shell Unix en sistemas windows. He probado el comando original en cygwin y tira. Si vas a hacer más cosas de estas te puede ser util, awk esta pensado exactamente para el tratamiento de textos.
nintiendo1
16/09/2014, 11:22
Parece que te dan problemas los quote de windows, prueba a escaparlos con el backslash a ver, tal que asi:
awk BEGIN{FS=\" \"; OFS=FS}{print $1,\"{\",$2,\"}\",\"{\",$3,\"}\",\"{\",$4,\"}\",\"{\",$5,\"}\"}
echo 'Coche fff qq eee vfvvv gbdg gh6rhyh6' | awk BEGIN{FS=\" \"; OFS=FS}{print $1,\"{\",$2,\"}\",\"{\",$3,\"}\",\"{\",$4,\"}\",\" {\",$5,\"}\"}
Me da el siguiente error:
awk: BEGIN{FS="
awk: ^ unterminated string
awk: BEGIN{FS="
Saludos y gracias.
^MiSaTo^
16/09/2014, 11:36
Aquí lo tienes en python. No es que esté muy bien porque no he hecho nada con python en mi vida, pero funciona (he probado con el ejemplo que has puesto con Coche y Moto)
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
file = open(filename, 'r');
for line in file:
words = line.split( );
newline = start + ' ';
for index in xrange(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
print newline;
Básicamente lo que hace es leer un archivo llamado cadenas.txt (arriba del todo en filename pon el nombre del fichero que quieras leer CON LA RUTA si no está en la misma carpeta).
Y luego en start y final, pon por lo que quieras sustituir el principio (en mi caso Coche por Moto) y el final de la cadena (pongo un 2).
No se si he entendido al 100% lo que quieres hacer así que échale un ojo y si tal te lo cambio.
nintiendo1
16/09/2014, 11:51
Aquí lo tienes en python. No es que esté muy bien porque no he hecho nada con python en mi vida, pero funciona (he probado con el ejemplo que has puesto con Coche y Moto)
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
file = open(filename, 'r');
for line in file:
words = line.split( );
newline = start + ' ';
for index in xrange(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
print newline;
Básicamente lo que hace es leer un archivo llamado cadenas.txt (arriba del todo en filename pon el nombre del fichero que quieras leer CON LA RUTA si no está en la misma carpeta).
Y luego en start y final, pon por lo que quieras sustituir el principio (en mi caso Coche por Moto) y el final de la cadena (pongo un 2).
No se si he entendido al 100% lo que quieres hacer así que échale un ojo y si tal te lo cambio.
Lo he copiado tal cual, creando un archivo cadenas.txt, con el ejemplo que yo puse y da error.
line 17
print newline;
SyntaxError: invalid syntax
Saludos y gracias!
Prueba ahora el código de ^MiSaTo^:
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
file = open(filename, 'r');
for line in file:
words = line.split( );
newline = start + ' ';
for index in range(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
print (newline);
Python tiene algunas diferencias dependiendo de la versión que tengas instalada.
^MiSaTo^
16/09/2014, 12:05
Prueba ahora el código de ^MiSaTo^:
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
file = open(filename, 'r');
for line in file:
words = line.split( );
newline = start + ' ';
for index in range(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
print (newline);
Python tiene algunas diferencias dependiendo de la versión que tengas instalada.
Gracias por corregirlo sereno, como digo no he hecho nada con Python nunca XD
PD. nintiendo1 lleva cuidado con las tabulaciones/espacios que python es pijotero con eso
nintiendo1
16/09/2014, 12:07
Prueba ahora el código de ^MiSaTo^:
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
file = open(filename, 'r');
for line in file:
words = line.split( );
newline = start + ' ';
for index in range(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
print (newline);
Python tiene algunas diferencias dependiendo de la versión que tengas instalada.
Gracias por corregirlo sereno, como digo no he hecho nada con Python nunca XD
PD. nintiendo1 lleva cuidado con las tabulaciones/espacios que python es pijotero con eso
Ok, con lo de Sereno ya va perfecto.
Sin embargo, me gustaría que los resultados me los guardase en otro .txt y no sé quedase en la consola de comandos, más que nada para poder copiarlos.
Es decir, que me los lea del cadenas.txt, y los resultados me los guarde en cadenas1.txt
Si ya hace eso, es perfecto :lol2:
Saludos.
^MiSaTo^
16/09/2014, 12:14
Ok, con lo de Sereno ya va perfecto.
Sin embargo, me gustaría que los resultados me los guardase en otro .txt y no sé quedase en la consola de comandos, más que nada para poder copiarlos.
Es decir, que me los lea del cadenas.txt, y los resultados me los guarde en cadenas1.txt
Si ya hace eso, es perfecto :lol2:
Saludos.
Aquí lo tienes modificado
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
# El nombre del fichero a guardar los resultados
results_filename = 'cadenas1.txt'
file = open(filename, 'r');
result_file = open(results_filename, 'w');
for line in file:
words = line.split( );
newline = start + ' ';
for index in xrange(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
result_file.write(newline+'\n');
nintiendo1
16/09/2014, 12:28
Aquí lo tienes modificado
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
# El nombre del fichero a guardar los resultados
results_filename = 'cadenas1.txt'
file = open(filename, 'r');
result_file = open(results_filename, 'w');
for line in file:
words = line.split( );
newline = start + ' ';
for index in xrange(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
result_file.write(newline+'\n');
Me da el siguiente error:
Traceback (most recent call last):
File "C:\ruta\pruebamisato.py", line 16, in (module)
for index in xrange(1,5):
NameError: name ´xrange´ is not defined
Saludos y gracias!
Cambia xrange por range.
Es por python 3
^MiSaTo^
16/09/2014, 12:35
Cambia xrange por range.
Es por python 3
joe gracias otra vez xD
nintiendo1
16/09/2014, 12:49
Ya funciona perfecto.
Dios os bendiga :lol2:
Y eso que pensaba que ya existiría un programa fácil para esto y la que hemos tenido que liar :lol2:
Saludos.
^MiSaTo^
16/09/2014, 12:51
Ya funciona perfecto.
Dios os bendiga :lol2:
Y eso que pensaba que ya existiría un programa fácil para esto y la que hemos tenido que liar :lol2:
Saludos.
Es bastante facil de hacer si sabes programar :) Te lo digo porque yo no he hecho NADA con python nunca (primera vez) y ahi lo hemos hecho xDD Con la ayuda de sereno eso si. Pero el cómo hacerlo es trivial :)
Sois todos unos cracks :)
Yo, que no tengo ni idea de programar, para esas cosas suelo usar el Notepad++. Con un poco de paciencia siempre encuentras el modo de modificar texto masivamente con las herramientas que incluye...
slaudos
Me alegro que funcione :brindis:.
Como dice Misato, el problema no era complicado y lo mismo daba el lenguaje, te había dicho python ya que me parece sencillo y con muchos ejemplos y documentación (pero no me acordaba que tenia pequeños cambios según la versión que utilices :risas:)
^MiSaTo^
16/09/2014, 13:07
Me alegro que funcione :brindis:.
Como dice Misato, el problema no era complicado y lo mismo daba el lenguaje, te había dicho python ya que me parece sencillo y con muchos ejemplos y documentación (pero no me acordaba que tenia pequeños cambios según la versión que utilices :risas:)
Sí python para estas cosas es genial :) Yo tiro mucho de bash para cosas así pero claro entre que es más limitado y que bueno en el caso de nintiendo1 usa windows... python creo que era más adecuado.
A ver si aprendo python bien xD
PD. en relación a esto que venimos hablando:
Geeks and repetitive tasks
http://i.imgur.com/Q8kV8.png
¡Vaya! curiosamente tenía un programilla hecho para algo similar en Visual basic (no me apedreeis); si llego a leer el hilo antes lo podría haber adaptado sin esfuerzo.
^MiSaTo^
16/09/2014, 13:12
¡Vaya! curiosamente tenía un programilla hecho para algo similar en Visual basic (no me apedreeis); si llego a leer el hilo antes lo podría haber adaptado sin esfuerzo.
Visual Basic? Ni siquiera el .net?
http://1.bp.blogspot.com/-Al0CREQMh8I/UDeKfelzi8I/AAAAAAAAAtg/InIHND_k3cs/s1600/F7C2430C6.jpg
http://imgs.xkcd.com/comics/regular_expressions.png (http://xkcd.com/208/)
Una pena que haya llegado cuando ya lo teníais solucionado de otro modo. :D
nintiendo1
16/09/2014, 13:18
El problema es que no tengo ni remota idea de programar.
Lo más que dí en informática en el colegio/instituto fue lo que es el ratón, el teclado y demás, y la historia de Internet (como se creo lo del WWW) :lol2::lol2:
La cuestión es que cuando empecé a hacerlo a mano, pensé que como tuviese que hacer eso cada varios días me daba algo, así que por eso pregunté aquí, que a lo mejor existía algo similar.
Pero vamos, que con lo de Misato/Sereno ya va perfecto, es justo lo que quería.
Saludos y gracias.
Pues las expresiones regulares son muy agradecidas cuando has practicado un poco.
En este caso, te valdría con algo así desde un editor de texto que admita búsqueda y reemplazo mediante regular expressions:
Buscar: (.*?) (.*?) (.*?) (.*?) (.*?) (.*?) (.*)
Reemplazar por: ZZZ { \2 } { \3 } { \4 } { \5 } { \6 } { YYY }
Pero lo cierto es que te resultará mucho más con los scripts que te han creado estos fieras. :)
Visual Basic? Ni siquiera el .net?
http://1.bp.blogspot.com/-Al0CREQMh8I/UDeKfelzi8I/AAAAAAAAAtg/InIHND_k3cs/s1600/F7C2430C6.jpg
Si si, era el .net, soy un hereje pero no TAN hereje, guardad las antorchas y sacad los látigos
^MiSaTo^
16/09/2014, 14:41
Pues las expresiones regulares son muy agradecidas cuando has practicado un poco.
En este caso, te valdría con algo así desde un editor de texto que admita búsqueda y reemplazo mediante regular expressions:
Buscar: (.*?) (.*?) (.*?) (.*?) (.*?) (.*?) (.*)
Reemplazar por: ZZZ { \2 } { \3 } { \4 } { \5 } { \6 } { YYY }
Pero lo cierto es que te resultará mucho más con los scripts que te han creado estos fieras. :)
Sï, las expresiones regulares son poderosas pero para lo que quiere hacer no es un poco "overkill"? Realmente reemplaza sólo el primer grupo (o palabra) y añade las llaves :) Aparte que con un script no hace falta ni que abra el editor de textos
GameMaster
16/09/2014, 14:49
la verdad llevo seculos pensando en este programilla para renombrar ficheros de carpetas y nunca lo he hecho, si quieres lo hago este finde y lo comparto.
Es para quitar spam de nombres o renombrar los mp3's a mi gusto
^MiSaTo^
16/09/2014, 14:53
la verdad llevo seculos pensando en este programilla para renombrar ficheros de carpetas y nunca lo he hecho, si quieres lo hago este finde y lo comparto.
Es para quitar spam de nombres o renombrar los mp3's a mi gusto
Para eso ya tienes un huevo de programillas como por ejemplo el Bulk Rename Utility (http://www.bulkrenameutility.co.uk/Main_Intro.php) (que es el único que me suena de windows, pero se que hay muchos más). Yo lo haría con un script de bash o lo que haya en windows (si es que hay algo como bash)
GameMaster
16/09/2014, 14:56
este sirve
http://www.codeproject.com/KB/macros/SmartReplace/SmartReplace_bin.zip
nintiendo1
16/09/2014, 14:57
la verdad llevo seculos pensando en este programilla para renombrar ficheros de carpetas y nunca lo he hecho, si quieres lo hago este finde y lo comparto.
Es para quitar spam de nombres o renombrar los mp3's a mi gusto
En mi caso no es renombrar ficheros.
De todas formas, lo de Misato (con los arreglos de sereno) me va PERFECTO, para lo que yo quiero es inmejorable, vamos, es que no tardo ni un segundo, le doy doble-click al archivo y en 1 segundo ya tengo el txt con todo arreglado. Es impresionante.
Saludos.
^MiSaTo^
16/09/2014, 14:59
En mi caso no es renombrar ficheros.
De todas formas, lo de Misato (con los arreglos de sereno) me va PERFECTO, para lo que yo quiero es inmejorable, vamos, es que no tardo ni un segundo, le doy doble-click al archivo y en 1 segundo ya tengo el txt con todo arreglado. Es impresionante.
Saludos.
Los programadores hacemos magia negra! XD
Ya en serio, me guardo tu post que por fin alguien (no-programador) me dice algo asi o me da las gracias xDDDDD (bueno y a sereno tb xD)
Para eso ya tienes un huevo de programillas como por ejemplo el Bulk Rename Utility (http://www.bulkrenameutility.co.uk/Main_Intro.php) (que es el único que me suena de windows, pero se que hay muchos más). Yo lo haría con un script de bash o lo que haya en windows (si es que hay algo como bash)
el "renamer" esta muy bien...
slaudos
Los programadores hacemos magia negra! XD
Ya en serio, me guardo tu post que por fin alguien (no-programador) me dice algo asi o me da las gracias xDDDDD (bueno y a sereno tb xD)
Yo me hice un script conversor de videos para 360... y me lo agradeci a mi mismo cada dia que lo usaba
nintiendo1
16/09/2014, 15:14
Los programadores hacemos magia negra! XD
Ya en serio, me guardo tu post que por fin alguien (no-programador) me dice algo asi o me da las gracias xDDDDD (bueno y a sereno tb xD)
Es que para mi hacer eso sería imposible xD
Vamos, si antes de abrir este hilo pensaba que en python había que compilar :lol2:
Saludos.
A ver si aprendo python bien xD
Ya ha corregido sereno las diferencias entre Python 2 y Python 3. Déjame recordar:
- En Python las líneas no hace falta acabarlas con ; aunque a mí también se me escapa a menudo :D
- En Python3, la función print() es una función normal. Es decir: lleva paréntesis siempre: print('Hola'). En Python2 por alguna razón extraña esos paréntesis eran opcionales.
- Las diferencias en Python2 entre range() y xrange() son sutiles: el primero devuelve una lista y el segundo un iterador. La diferencia es que la lista se crea y se devuelve entera con el range() pero es dinámica con xrange() y se crea según vas accediendo a los items. Así que xrange() consume mucha menos memoria y la creación es mucho más rápida que range() si la lista es enorme, pero es matar moscas a cañonazos si la lista es pequeña. En Python3 ya no hay opción de lista así que el range() de Python3 es como el xrange() de Python2.
- el range(1, 5), mejor: range(1, len(words))
- En vez de '\n' debería ser '\r\n', ¿no? O mucho mejor: os.linesep (hay que "import os" al inicio)
^MiSaTo^
16/09/2014, 15:25
Ya ha corregido sereno las diferencias entre Python 2 y Python 3. Déjame recordar:
- En Python las líneas no hace falta acabarlas con ; aunque a mí también se me escapa a menudo :D
- En Python3, la función print() es una función normal. Es decir: lleva paréntesis siempre: print('Hola'). En Python2 por alguna razón extraña esos paréntesis eran opcionales.
- Las diferencias en Python2 entre range() y xrange() son sutiles: el primero devuelve una lista y el segundo un iterador. La diferencia es que la lista se crea y se devuelve entera con el range() pero es dinámica con xrange() y se crea según vas accediendo a los items. Así que xrange() consume mucha menos memoria y la creación es mucho más rápida que range() si la lista es enorme, pero es matar moscas a cañonazos si la lista es pequeña. En Python3 ya no hay opción de lista así que el range() de Python3 es como el xrange() de Python2.
- el range(1, 5), mejor: range(1, len(words))
- En vez de '\n' debería ser '\r\n', ¿no? O mucho mejor: os.linesep (hay que "import os" al inicio)
Gracias por todo pero una cosilla:
- el range(1, 5), mejor: range(1, len(words))
Eso está así porque sólo quiero del 1 al 4, las palabras si te fijas pueden ser 7, 6 o N. pero sólo quiero de la 1 a la 4 :) ya se que es mejor no poner valores directamente.
Y por qué debería ser \r\n? Sólo quiero una línea nueva, en windows no es \n?
-----Actualizado-----
Es que para mi hacer eso sería imposible xD
Vamos, si antes de abrir este hilo pensaba que en python había que compilar :lol2:
Saludos.
No te preocupes, nadie nace sabiendo. Lo que pasa que vi que pese a que tú decías que no sabias programar, te enlazaban documentación de python y sinceramente si no sabes nada es como si yo me leo un libro tuyo de medicina que me quedaré HURR DURR
Así que como a mi me cuesta poco o nada hacer algo así, dije pues mejor te pongo un script que sea hacer copy-paste que que andes tu aprendiendo qué es un bucle for ;)
pero sólo quiero de la 1 a la 4
Ah, vale, no había visto ese requisito.
Y por qué debería ser \r\n? Sólo quiero una línea nueva, en windows no es \n?
No. En Windows línea nueva es '\r\n' :D
El bloc de notas aún se hace un lío con eso así que mejor respetar la secuencia para nueva línea del sistema que toque.
^MiSaTo^
16/09/2014, 15:36
Ah, vale, no había visto ese requisito.
No. En Windows línea nueva es '\r\n' :D
El bloc de notas aún se hace un lío con eso así que mejor respetar la secuencia para nueva línea del sistema que toque.
No tenía ni idea de eso, no he usado nunca windows xD Entonces cambialo nintiendo1 ;)
PD. Aún sigue existiendo el bloc de notas? Y es más, alguien lo usa? Por dios habiendo Sublime Text...
Es una herencia de MS-DOS. En Windows creo que ya solo queda el bloc de notas como el único programa que no entiende un \n aislado, pero precisamente es el programa que abre los .txt por defecto.
^MiSaTo^
16/09/2014, 15:47
Qué barbaridad, en pleno 2014 y aun andamos así xD
nintiendo1
16/09/2014, 16:12
No te preocupes, nadie nace sabiendo. Lo que pasa que vi que pese a que tú decías que no sabias programar, te enlazaban documentación de python y sinceramente si no sabes nada es como si yo me leo un libro tuyo de medicina que me quedaré HURR DURR
Así que como a mi me cuesta poco o nada hacer algo así, dije pues mejor te pongo un script que sea hacer copy-paste que que andes tu aprendiendo qué es un bucle for ;)
Sí, cuando no sabes ningún lenguaje de programación, se agradece que te lo den ya hecho xD
Quizás con tiempo, viendo los ejemplos, hubiese sacado algo usable, pero me hubiese tocado meter los datos a mano o cosas así, es decir, no hubiese alcanzado algo tan perfeccionado como que le lea el .txt y me saque otro .txt con los cambios ya hecho. Es que así ahorro muchísimo tiempo.
No tenía ni idea de eso, no he usado nunca windows xD Entonces cambialo nintiendo1 ;)
PD. Aún sigue existiendo el bloc de notas? Y es más, alguien lo usa? Por dios habiendo Sublime Text...
Yo uso el bloc de notas de Windows :lol2: Supongo que si no programas, su función la cumple xD
Aquí lo dejo con ese arreglo. Miradlo a ver si está bien o tengo que cambiar algo más, aunque el anterior me servía:
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
# El nombre del fichero a guardar los resultados
results_filename = 'cadenas1.txt'
file = open(filename, 'r');
result_file = open(results_filename, 'w');
for line in file:
words = line.split( );
newline = start + ' ';
for index in xrange(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
result_file.write(newline+'\r\n');
Saludos y gracias!
^MiSaTo^
16/09/2014, 16:16
Sí, cuando no sabes ningún lenguaje de programación, se agradece que te lo den ya hecho xD
Quizás con tiempo, viendo los ejemplos, hubiese sacado algo usable, pero me hubiese tocado meter los datos a mano o cosas así, es decir, no hubiese alcanzado algo tan perfeccionado como que le lea el .txt y me saque otro .txt con los cambios ya hecho. Es que así ahorro muchísimo tiempo.
Yo uso el bloc de notas de Windows :lol2: Supongo que si no programas, su función la cumple xD
Aquí lo dejo con ese arreglo. Miradlo a ver si está bien o tengo que cambiar algo más, aunque el anterior me servía:
# El nombre de tu archivo (con la ruta) aqui
filename ='cadenas.txt';
# Aqui por lo que quieras sustituir la primera parte (AAA) y el final YYYY
start = 'Moto';
final = '2'
# El nombre del fichero a guardar los resultados
results_filename = 'cadenas1.txt'
file = open(filename, 'r');
result_file = open(results_filename, 'w');
for line in file:
words = line.split( );
newline = start + ' ';
for index in xrange(1,5):
newline += '{ '+words[index] + ' } ';
newline += '{ '+ final + ' }';
result_file.write(newline+'\r\n');
Saludos y gracias!
La última línea es result_file.write(newline+'\r\n');
EDIT: por algún misterio que desconozco el firefox no me pinta el ') del final de esa línea pero veo que está ahí cuando te he quoteado... en cualquier caso, así lo tienes bien
nintiendo1
16/09/2014, 19:21
Lo he probado con la nueva línea que se ha cambiado y me va igual de bien que antes, es decir, perfecto.
Saludos y gracias.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.