Передать динамическую таблицу HTML в электронную таблицу

Код

import collections as ct


def read_file(filepath):
    """Yield a generator of lines from a file."""
    with open(filepath, "r") as f:
        for line in f:
            yield line.strip()


def find_longest_sequences(seqs):
    """Return a dict of the long common sequences."""
    seqs = tuple(seqs) 
    dd = ct.defaultdict(list)
    [dd[k].append(seq) for seq in seqs for k in seqs if k in seq]
    return {max(v, key=len) for v in dd.values()}


data = read_file("test.txt")
find_longest_sequences(data)

Выход

{'ABCDEFGHIJKLMNO',
 'CEST',
 'DBTSFDEO',
 'EAEUDNBNUW',
 'EOEUDNBNUWD',
 'FEOEUDNBNUW'}

Подробности

Мы используем read_file для получения каждой строки файла.

find_longest_sequences создает defaultdict , который группирует аналогичные последовательности вместе. Он выполняет итерацию данных с помощью двух циклов:

  1. Первый цикл строит диктовку пустых списков с уникальными последовательностями в качестве ключей.
  2. Второй цикл добавляет в качестве значений любые строки, похожие на ключ.

Набор значений производится из полученного dict, и возвращаются самые длинные последовательности.

Обратите внимание на некоторые несоответствия с вашим ожидаемым выходом:

  1. FGH перекрывается с ABCDEFGHIJKLMNO и, следовательно, не является допустимым выходом.
  2. FEOEUDNBNUWD не является исходной последовательностью. Пост-обработка необходима для перекрывающихся последовательностей.

-1
задан Matheus Gomes 18 January 2019 в 18:14
поделиться

1 ответ

По поводу вашего последнего вопроса ниже:

Это один из способов. Я склонен делать такие вещи на стороне сервера, а затем передавать его как объект в HTML-файл. Это некоторый код из моего предыдущего проекта. Он не предназначен для точного соответствия вашим потребностям, но вы можете использовать его в качестве отправной точки.

Google Script:

function htmlSpreadsheet(ssO)
{
  var br='<br />';
  var s='';
  var hdrRows=1;
  var ss=SpreadsheetApp.openById(ssO.id);
  var sht=ss.getSheetByName(ssO.name);
  var rng=sht.getDataRange();
  var rngA=rng.getValues();
  s+='<table>';
  for(var i=0;i<rngA.length;i++)
  {
    s+='<tr>';
    for(var j=0;j<rngA[i].length;j++)
    {
      if(i<hdrRows)
      {
        s+='<th id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="20" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>';
      } 
      else
      {
        s+='<td id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="20" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>';
      }
    }
    s+='</tr>';
  }
  s+='</table>';
  s+='</body></html>';
  var namehl=Utilities.formatString('<h1>%s</h1>', ss.getName());
  var shnamehl=Utilities.formatString('<h2>%s</h2>', sht.getName());
  var opO={hl:s,name:namehl,shname:shnamehl};
  return opO;
}

Это Javascript, который его называет:

$(function() {//requires appropriate JQuery resource or you could us windows.onload

      google.script.run
         .withSuccessHandler(updateSelect)
         .getAllSpreadSheets();
    });

Это Javascript, который обновляет электронную таблицу:

function updateSS(i,j)
{
  var str='#txt' + String(i) + String(j);
  var value=$(str).val();
  var ssId=$('#sel1').val();
  var name=$('#sel2').val();
  var updObj={rowIndex:i,colIndex:j,value:value,id:ssId,name:name};
  $(str).css('background-color','#ffff00');
  google.script.run
     .withSuccessHandler(updateSheet)
     .updateSpreadsheet(updObj);
}

и это скрипт Google, который обновляет электронную таблицу:

function updateSpreadsheet(updObj)
{

  var i=updObj.rowIndex;
  var j=updObj.colIndex;
  var value=updObj.value;
  var ss=SpreadsheetApp.openById(updObj.id);
  var sht=ss.getSheetByName(updObj.name);
  var rng=sht.getDataRange();
  var rngA=rng.getValues();
  rngA[i][j]=value;
  rng.setValues(rngA);
  var data = {'message':'Cell[' + Number(i + 1) + '][' + Number(j + 1) + '] Has been updated', 'ridx': i, 'cidx': j};
  return data;
}
0
ответ дан Cooper 18 January 2019 в 18:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: