Necesito Programador de Python

Estado
No está abierto para más respuestas.

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
Necesito alguien que pueda hacerme un pequeño código para modificar lineas en el Notepad++ (tiene un plugin de Phyton)

Básicamente consistiría en sustituir unos caracteres a un número, es más sencillo de lo que parece.

Suponamos que tengo un archivo en Notepad++ con los siguientes datos.


La vuelta al mundo en 80 días |27m34s|
El Tour de Francia empieza hoy |12m55s|
Cómo hacer el mejor SEO |7m22s|
.
.
.
.


Bien, el programa lo que tendría que hacer es sustituir los carácteres "|27m34s|" y pasarlos a segundos, de tal forma tendría que quedar así "|918|" sin las comillas. Tan solo sería multiplicar por 60 los minutos y sumar los segundos, quitando la m y la s.

Tendría que quedar de la siguiente forma:

La vuelta al mundo en 80 días |918|
El Tour de Francia empieza hoy |775|
Cómo hacer el mejor SEO |442|
.
.
.
.

Es sencillo para alguien que programe, o si conoceis a alguien me lo decis y contacto con él.

Gracias
 

Zeokat

Oro
Usuario de Bronce
Mensajes
1,194
Puntuación de reacción
4
Yo el código en Python te lo hago, ahora como hacerlo para que funcione como un plugin de Notepad++ ni idea.

Si te sirve un programa auxiliar programado en C#... tu pegas el texto en uan caja de texto:
La vuelta al mundo en 80 días |27m34s|
El Tour de Francia empieza hoy |12m55s|
Cómo hacer el mejor SEO |7m22s|

Y te saldria en otra caja de texto algo como:
La vuelta al mundo en 80 días |918|
El Tour de Francia empieza hoy |775|
Cómo hacer el mejor SEO |442|

Ya me diras.
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Si abres el text en tu navegador y ejecutas esto en la consola te servirá:

HTML:
var text = document.body.innerHTML
         .replace(/<\/?pre>/g, '')
         .replace(/^\s+|\s+$/, '')
         .split("\n");

text.map(function (str) {
  var t = str.replace(/\|(.*)\|$/, function ($1, $2) {
    var mins = $2.substr(0, $2.indexOf('m'));
    var secs = parseInt($2.replace(mins + 'm', ''));

    return '|' + ((mins * 60) + secs) + 's|';
  });
  
  return t;
});

alert(text.join("\n"));
 

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
Me da igual el lenguaje de programación, mientras lo cambie me vale pero ten en cuenta que algunos archivos llegan a tener 10.000 lineas, igual al programa le falta memoria o se raletiza mucho.

Yo el código en Python te lo hago, ahora como hacerlo para que funcione como un plugin de Notepad++ ni idea.

Si te sirve un programa auxiliar programado en C#... tu pegas el texto en uan caja de texto:


Y te saldria en otra caja de texto algo como:


Ya me diras.

- - - Actualización- - -

Lo he probado pero no hace cambios ni me guarda nada, además aparece una linea abajo en la consola que dice "undefined" :(

Si abres el text en tu navegador y ejecutas esto en la consola te servirá:

HTML:
var text = document.body.innerHTML
         .replace(/<\/?pre>/g, '')
         .replace(/^\s+|\s+$/, '')
         .split("\n");

text.map(function (str) {
  var t = str.replace(/\|(.*)\|$/, function ($1, $2) {
    var mins = $2.substr(0, $2.indexOf('m'));
    var secs = parseInt($2.replace(mins + 'm', ''));

    return '|' + ((mins * 60) + secs) + 's|';
  });
  
  return t;
});

alert(text.join("\n"));
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Me da igual el lenguaje de programación, mientras lo cambie me vale pero ten en cuenta que algunos archivos llegan a tener 10.000 lineas, igual al programa le falta memoria o se raletiza mucho.



- - - Actualización- - -

Lo he probado pero no hace cambios ni me guarda nada, además aparece una linea abajo en la consola que dice "undefined" :(
Tenía un pequeño error, pruébalo en Firefox:

PHP:
var text = document.body.innerHTML
         .replace(/<\/?pre.*?>/g, '')
         .replace(/^\s+|\s+$/, '')
         .split("\n");

text = text.map(function (str) {
  var t = str.replace(/\|(.*)\|$/, function ($1, $2) {
    var mins = $2.substr(0, $2.indexOf('m'));
    var secs = parseInt($2.replace(mins + 'm', ''));

    return '|' + ((mins * 60) + secs) + 's|';
  });
  
  return t;
});

alert(text.join("\n"));

- - - Actualización- - -

A mí si me va, si no te va puede que el texto no cumpla?

KfrHT2P.png
 

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
Pues no funciona porque en el texto hay más operadores de canalización "|", te pego unas cuantas líneas para que lo veas

909694|<iframe width="640" height="480" src="http://xhamster.com/xembed.php?video=909694" frameborder="0" scrolling="no"></iframe>|http://et4.xhamster.com/t/694/240/5_909694.jpg|Elder sister-in-law|Asian;Japanese|49m1s|2011-11-12|
255710|<iframe width="640" height="480" src="http://xhamster.com/xembed.php?video=255710" frameborder="0" scrolling="no"></iframe>|http://et0.xhamster.com/t/710/240/3_255710.jpg|Prostate Massage And Rimming Collection|Big Boobs;Hardcore;Massage;Ass Licking|1m118m48s|2009-12-24|
229253|<iframe width="640" height="480" src="http://xhamster.com/xembed.php?video=229253" frameborder="0" scrolling="no"></iframe>|http://et3.xhamster.com/t/253/240/3_229253.jpg|south indian porn movie|Amateur;Asian;Funny;Indian|22m43s|2009-11-04|
1449697|<iframe width="640" height="480" src="http://xhamster.com/xembed.php?video=1449697" frameborder="0" scrolling="no"></iframe>|http://et7.xhamster.com/t/697/240/1_1449697.jpg|Melissa Monet Big Booty MILF|Brunettes;Matures;MILFs|27m48s|2012-09-13|
252997|<iframe width="640" height="480" src="http://xhamster.com/xembed.php?video=252997" frameborder="0" scrolling="no"></iframe>|http://et7.xhamster.com/t/997/240/3_252997.jpg|Spanish 18yo fucks old unknow for 300 euro|Amateur;Hardcore;Stockings;Spanish|37m16s|2009-12-19|
591355|<iframe width="640" height="480" src="http://xhamster.com/xembed.php?video=591355" frameborder="0" scrolling="no"></iframe>|http://et5.xhamster.com/t/355/240/5_591355.jpg|Unfaithful Mom...F70|Big Boobs;MILFs;Tits|11m25s|2011-03-14|

Basicamente mi Theme necesita el número |1054| y no |17m34s| para que se muestre correctamente la duración del video. El problema es ese, que al haber más operador de canalización "|" en la línea no lo hace bien.

Yo lo intentaba con expresiones regulares "\|([0-9]*)m([0-9]*)" y conseguí capturar el texto quería, pero claro con expresiones regulares no se pueden hacer operaciones, se necesita algo de programar


Tenía un pequeño error, pruébalo en Firefox:

PHP:
var text = document.body.innerHTML
         .replace(/<\/?pre.*?>/g, '')
         .replace(/^\s+|\s+$/, '')
         .split("\n");

text = text.map(function (str) {
  var t = str.replace(/\|(.*)\|$/, function ($1, $2) {
    var mins = $2.substr(0, $2.indexOf('m'));
    var secs = parseInt($2.replace(mins + 'm', ''));

    return '|' + ((mins * 60) + secs) + 's|';
  });
  
  return t;
});

alert(text.join("\n"));

- - - Actualización- - -

A mí si me va, si no te va puede que el texto no cumpla?

KfrHT2P.png
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Pues no funciona porque en el texto hay más operadores de canalización "|", te pego unas cuantas líneas para que lo veas



Basicamente mi Theme necesita el número |1054| y no |17m34s| para que se muestre correctamente la duración del video. El problema es ese, que al haber más operador de canalización "|" en la línea no lo hace bien.

Yo lo intentaba con expresiones regulares "\|([0-9]*)m([0-9]*)" y conseguí capturar el texto quería, pero claro con expresiones regulares no se pueden hacer operaciones, se necesita algo de programar

Claro, estaba preparada para el ejemplo que pusiste, además lo tienes todo en una sola línea, prueba así:

HTML:
var text = document.body.innerHTML
         .replace(/<\/?pre.*?>/g, '')
         .replace(/^\s+|\s+$/, '')
         .replace(/(\|(\d+)m(\d+)s\|)/g, function () {
           return '|' + ((+arguments[2] * 60) + +arguments[3]) + '|s';
         });

alert(text)
 

Zeokat

Oro
Usuario de Bronce
Mensajes
1,194
Puntuación de reacción
4
@Masterchef, has dado mal el input, así normal que no te funcione :mola:

Especifica que es lo que entra y lo que sale, el contenido exacto, sino no sirve de nada.
 
Última edición:

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
Claro, estaba preparada para el ejemplo que pusiste, además lo tienes todo en una sola línea, prueba así:

HTML:
var text = document.body.innerHTML
         .replace(/<\/?pre.*?>/g, '')
         .replace(/^\s+|\s+$/, '')
         .replace(/(\|(\d+)m(\d+)s\|)/g, function () {
           return '|' + ((+arguments[2] * 60) + +arguments[3]) + '|s';
         });

alert(text)

Vale muchas gracias ya casi está, lo pasa a segundos. Pero ahora el símbolo "<" lo convierte en > y el símbolo ">" en <
Por cierto creo que la "s" final sobra: return '|' + ((+arguments[2] * 60) + +arguments[3]) + '|s';

Una cosa más, me aparece una ventanita con el resultado, ¿cómo lo voy a guardar en un archivo de texto?
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Vale muchas gracias ya casi está, lo pasa a segundos. Pero ahora el símbolo "<" lo convierte en > y el símbolo ">" en <
Por cierto creo que la "s" final sobra: return '|' + ((+arguments[2] * 60) + +arguments[3]) + '|s';

Una cosa más, me aparece una ventanita con el resultado, ¿cómo lo voy a guardar en un archivo de texto?
Lo símbolos son al revés < = < y > = > y sí la 's' debería estar así 's|' si lo que quieres es que aparezca, sino quítala. Si tulizas un navegador nuevo que supongo que sí utiliza lo siguiente y lo descargas a un nuevo fichero:

HTML:
var text = document.body.innerHTML
         .replace(/<\/?pre.*?>/g, '')
         .replace(/^\s+|\s+$/, '')
         .replace(/(\|(\d+)m(\d+)s\|)/g, function () {
             return '|' + ((+arguments[2] * 60) + +arguments[3]) + '|s';
         });

var blob = new Blob([text], {type : 'text/csv;charset=utf8;'})
,   link = document.createElement('a');

link.setAttribute('href',     URL.createObjectURL(blob));
link.setAttribute('download', (Date.now()).toString() + '.csv');

document.body.appendChild(link);
link.click();
link.remove();
 

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
Perfecto, pero sigue cambiando los signos < y >, ¿cómo se hace para que no se sustituyan por < y > ???
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Perfecto, pero sigue cambiando los signos < y >, ¿cómo se hace para que no se sustituyan por < y > ???
HTML:
var text = document.body.innerHTML
         .replace(/<\/?pre.*?>/g, '')
         .replace(/^\s+|\s+$/, '')
         .replace(/(\|(\d+)m(\d+)s\|)/g, function () {
             return '|' + ((+arguments[2] * 60) + +arguments[3]) + '|s';
         })
         .replace(/<|>/g, function (m) {
             return m === '<' ? '<' : '>';
         });

var blob = new Blob([text], {type : 'text/csv;charset=utf8;'})
,   link = document.createElement('a');

link.setAttribute('href',     URL.createObjectURL(blob));
link.setAttribute('download', (Date.now()).toString() + '.csv');

document.body.appendChild(link);
link.click();
link.remove();
 

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
Eres un crack tio, muchas gracias. Que lenguaje es este? HTML ?? Yo sabía algo de visual basic y C++ pero este parece más chungo.
¿¿Sabes cómo guardar el archivos resultante con más peso/líneas??, solo guarda hasta las 500 líneas.

HTML:
var text = document.body.innerHTML
         .replace(/<\/?pre.*?>/g, '')
         .replace(/^\s+|\s+$/, '')
         .replace(/(\|(\d+)m(\d+)s\|)/g, function () {
             return '|' + ((+arguments[2] * 60) + +arguments[3]) + '|s';
         })
         .replace(/<|>/g, function (m) {
             return m === '<' ? '<' : '>';
         });

var blob = new Blob([text], {type : 'text/csv;charset=utf8;'})
,   link = document.createElement('a');

link.setAttribute('href',     URL.createObjectURL(blob));
link.setAttribute('download', (Date.now()).toString() + '.csv');

document.body.appendChild(link);
link.click();
link.remove();
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Eres un crack tio, muchas gracias. Que lenguaje es este? HTML ?? Yo sabía algo de visual basic y C++ pero este parece más chungo.
¿¿Sabes cómo guardar el archivos resultante con más peso/líneas??, solo guarda hasta las 500 líneas.
De nada jaja, es Javascript, HTML es un lenguaje de marcado no de programación y ni de lejos Javascript es más chungo que C++ xD

Sobre lo de las 500 líneas no tengo ni idea que yo sepa no hay un límite... en tu consola te muestra algún error o advertencia?
 

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
De nada jaja, es Javascript, HTML es un lenguaje de marcado no de programación y ni de lejos Javascript es más chungo que C++ xD

Sobre lo de las 500 líneas no tengo ni idea que yo sepa no hay un límite... en tu consola te muestra algún error o advertencia?


Vale, ha sido un error mio, si que lo guarda todo. Muchas gracias por todo ahora ya puedo prescindir de los odiosos plugins para importar videos xxx. He descubierto una forma de hacerlo todo automatizado al 100% y gratis :)
 
Última edición:

Masterchef

Cobre
Usuario de Bronce
Mensajes
553
Puntuación de reacción
1
Vaya ha salido un pequeño inconveniente;

Hay duraciones que tienen más de 60 minutos en total y se muestran de esta forma:

|1m45m23s|

El 1m significa una hora (no sé porque ponene m en lugar de h pero bueno) y se tendría que sumar esos 60 minutos al total.

¿¿¿ Sabes como variar el código para implementarlo ???
 
Estado
No está abierto para más respuestas.
Arriba