¿Como programar con Python la lectura de algunos caracteres específicos en un archivo CSV externo? Necesito condicionar

Poseo el siguiente archivo CSV:

COL1   COL2    COL3  x      x        Y         9      J        T   X      Y        X 

Necesito que el programa python sea capaz de ir recorriendo elemento por elemento, hasta que en donde cada que encuentre una “X” escriba en un nuevo archivo txt “Encontre X” y cada que encuentre una “Y” escriba “Encontre Y” de tal forma que cada que encuentre dichos valores escriba el resultado en nuevo.txt

Como exportar a pdf algunos campos de una tabla html con jsPDF

Estoy usando JSPDF para exportar una tabla a pdf , pero la tabla que estoy exportando tiene una columna con botones de acción, el problema es que al exportar la tabla también se exportan los botones y quisiera saber como puedo exportar solo algunas columnas de la tabla para así exportar la tabla menos sin la columna de los botones.

Aca está la tabla

<div class="panel-body panel panel-primary" id="content">                 <form method="POST" action="AdministrarReservasServlet">                     <button type="submit" name="btnMostrarReservas" class="btn btn-primary btn-sm"> <span class="glyphicon glyphicon-refresh"></span> Mostrar</button>                     <button type="button" name="btnVolver" class="btn btn-success btn-sm" onclick="location.href='barraCentral.jsp'"><span class="glyphicon glyphicon-arrow-left"></span> Volver</button>                       <br><br><br>                         <table class="table-condensed table-hover table-responsive" id="resultado">                             <thead>                                     <tr class="">                                     <th class="btn-info">N° Reserva</th>                                     <th class="btn-info">Origen</th>                                     <th class="btn-info">Destino</th>                                     <th class="btn-info" style="display:none">Origen Vuelo</th>                                     <th class="btn-info">Piezas</th>                                     <th class="btn-info">Kilos</th>                                     <th class="btn-info">Volumen</th>                                     <th class="btn-info">Estado</th>                                     <th class="btn-info" style='display:none'>Notas</th>                                     <th class="btn-info">Fecha Creación</th>                                     <th class="btn-info">Fecha Embarque</th>                                     <th class="btn-info">Tipo</th>                                     <th class="btn-info">Prioridad</th>                                     <th class="btn-info" style="display:none">Forma Pago</th>                                     <th class="btn-info" style="display:none">Tarifa</th>                                     <th class="btn-info" style="display:none">Tipo Moneda</th>                                     <th class="btn-info">Rut Cliente</th>                                     <th class="btn-info">Nombre Cliente</th>                                     <th class="btn-info" style="display:none">Telefono Cliente</th>                                     <th class="btn-info" style="display:none">Direccion Cliente</th>                                     <th class="btn-info" style="display:none">Email Cliente</th>                                     <th class="btn-info">Acción</th>                                     <!--<th class="btn-info">Cliente</th>                                     <th class="btn-info">Usuario</th>                                     <th class="btn-info">Acción</th>-->                                  </tr>                             </thead>                             <tbody>  <%                     try           {               for(int i=0; i<adminReservas.size(); i++)                   {                    out.println("<tr>");                       out.println("<td>"+adminReservas.get(i).getNumeroReserva()+"</td>");                     //out.println("<td><input type='text' value='"+adminReservas.get(i).getOrigenReserva()+"' class='input-sm form-control' size='5' readonly='readonly'></td>");                       out.println("<td>"+adminReservas.get(i).getOrigenReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getDestinoReserva()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getOrigenVueloReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getTotalPiezasReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getTotalKilosReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getTotalVolumenReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getEstadoReserva()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getNotaReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getFechaCreacionReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getFechaEmbarqueReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getTipoReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getPrioridadReserva()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getTipoTarifaReserva()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getTarifaReserva()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getTipoMonedaReserva()+"</td>");                       out.println("<td>"+adminReservas.get(i).getRutCliente()+"</td>");                       out.println("<td>"+adminReservas.get(i).getNombreCliente()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getTelefonoCliente()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getDireccionCliente()+"</td>");                       out.println("<td style='display:none'>"+adminReservas.get(i).getEmailCliente()+"</td>");                       out.println("<td>"                                 + "<button type='button'  class='btn btn-primary glyphicon glyphicon-eye-open btn-xs' data-toggle='modal' data-target='#exampleModal'></button>"                                 + " <button type='button'  class='btn btn-danger glyphicon glyphicon-trash btn-xs' data-toggle='modal' data-target='#modalAdministrarReservaEliminarReserva'></button>"                               + " <button type='button'  class='btn btn-success glyphicon glyphicon-eye-open btn-xs' onclick=location.href='detalleReserva.jsp'></button>"                               + "</td>");                                             //out.println("<td><a type='button'  href='modificarReservas.jsp?id='"+adminReservas.get(i).getNumeroReserva()+"' '  class='btn btn-primary glyphicon glyphicon-eye-open' style='font-size:19px'></button></td>");                                             //out.println("<td><input type='checkbox' name='check_guia' class='form-control checkbox' value='"+adminReservas.get(i).getNumeroReserva()+"'></td>");                                         }             }      catch(java.lang.NullPointerException ex)          {                      ex.getMessage();                    //out.print("<input type='text' value='"+ex.getMessage()+"'>");                      out.print("</tr>");          }   %>         </tbody>            </table> 

</div> 

Aca el codigo jquery para exportar

<script type="text/javascript">     function Export() {         html2canvas(document.getElementById('resultado'), {             onrendered: function (canvas) {                 var data = canvas.toDataURL();                 var docDefinition = {                     content: [{                         image: data,                         width: 500                     }]                 };                 pdfMake.createPdf(docDefinition).download("Table.pdf");             }         });     } </script> 

Acá el botón que ejecuta la función.

<input type="button" id="btnExport" value="Export" onclick="Export()" /> 

Acá el pdf de la tabla exportada.

introducir la descripción de la imagen aquí

espero su ayuda gracias.

¿Porque se me cambian algunos valores sin asignarlos? (Solo mostrando en consola)

tengo una duda… resulta que usando JavaScript y la sintaxis de ES6, y dividiendo mi código con ellos haciendo uso de la sentencia export e import, me di cuenta de que por alguna extraña razón, cuando trato de usar una función que retorna un nuevo arreglo y que es el resultado de una pequeña operación entre cada uno de los elementos de un arreglo bidimensional, me di cuenta de lo siguiente:

Tengo objetos creados aparte, tales como piezas, el jugador que controla cada pieza etc. (Ando creando un tetris), la función la ejecuta la clase jugador, y dentro de la clase jugador el constructor tiene un arreglo de piezas inicialmente vacio, la función que intento ejecutar recibe como parametro (Solo como prueba para las primeras dos piezas), una matriz que contiene las filas de la pieza en cuestión (A su vez, cada fila es un arreglo de numeros), tambien recibe como parametro el lado izquierdo de la pieza en el espacio (como coordenada x), y por ultimo, el ancho de cada “pixel”, que conforma la pieza.

Una de las piezas que recibe esta función se vería así tal cual:

[    [0,1,1],                //Pieza S    [1,1,0] ]; 

Cabe destacar que tengo una constante exportada en otro archivo, la cual la importo en otros, estas son las piezas en su estado original, la constante la renombre a SHAPES, ya que pensé que tal vez era por eso que no servia el código bien sin embargo no es eso…, apartir de SHAPES… en la clase del objeto pieza lo que hago es que apartir de un numero aleatorio entre 0 y 6, el constructor seteara uno de los atributos al que llame: “innerShape” como una copia de la pieza especifica correspondiente al numero aleatorio, esto lo hago con la función map(), entonces innerShape con una de las piezas seria por ejemplo la pieza de mas arriba.

Esta es la función:

function toPointMatrix(matrix,left, pixelH){      let newMatrix = matrix;      for(let i = 0; i < newMatrix.length; i++){          for(let j = 0; j < newMatrix[i].length; j++){              if(newMatrix[i][j] !== 0){                  newMatrix[i][j] = left + (pixelH * j);              }else{                  newMatrix[i][j] = -1;              }          }      }      return newMatrix;  } 

y la forma en como la estuve invocando (de momento solo para probarla para ver el resultado en consola) es esta:

 console.log(toPointMatrix(SHAPES[num_aleatorio], 0, 40)); 

Lo raro es que cuando hago un console.log (No asigno el resultado de esa función a ninguna variable ni nada o si??), entonces mi pregunta es…

¿Porqué cuando invoco esta función para ver el resultado en consola, se me cambia el arreglo original si no le estoy diciendo que cambie?