запись xlsx-файла из csv в python

Здесь много хороших ответов, но я хотел бы отметить, что их можно очень просто расширить, чтобы добиться более сложной сортировки. Единственное, что вам нужно сделать, это использовать оператор OR для цепочки сравнения, например:

objs.sort((a,b)=> fn1(a,b) || fn2(a,b) || fn3(a,b) )

Где fn1, fn2, ... являются функциями сортировки, которые возвращают [- 1,0,1]. Это приводит к «сортировке по fn1», «сортировке по fn2», которая в значительной степени равна ORDER BY в SQL.

Это решение основано на поведении оператора ||, который оценивает значение первое оцениваемое выражение, которое может быть преобразовано в true .

Простейшая форма имеет только одну встроенную функцию:

// ORDER BY last_nom
objs.sort((a,b)=> a.last_nom.localeCompare(b.last_nom) )

Имея два шага с last_nom , порядок сортировки first_nom будет выглядеть так:

// ORDER_BY last_nom, first_nom
objs.sort((a,b)=> a.last_nom.localeCompare(b.last_nom) || 
                  a.first_nom.localeCompare(b.first_nom)  )

Общая функция сравнения может быть примерно такой:

// ORDER BY 
let cmp = (a,b,n)=>a[n].localeCompare(b[n])

Эта функция может быть расширена для поддержки числовых полей , чувствительность к регистру, произвольные типы данных и т. д.

Вы можете использовать его с привязкой к ним по приоритету сортировки:

// ORDER_BY last_nom, first_nom
objs.sort((a,b)=> cmp(a,b, "last_nom") || cmp(a,b, "first_nom") )
// ORDER_BY last_nom, first_nom DESC
objs.sort((a,b)=> cmp(a,b, "last_nom") || -cmp(a,b, "first_nom") )
// ORDER_BY last_nom DESC, first_nom DESC
objs.sort((a,b)=> -cmp(a,b, "last_nom") || -cmp(a,b, "first_nom") )

. Дело в том, что чистый JavaScript с функциональным подходом может принять вас долгий путь без внешних библиотек или сложного кода. Это также очень эффективно, так как не нужно выполнять синтаксический анализ строк

0
задан Samra Memon 13 July 2018 в 20:58
поделиться

1 ответ

Похоже, вы пытаетесь прочитать «csvTranslations.csv» дважды, но вы только открываете файл один раз. Итак, как только ваш скрипт закончил чтение, чтобы записать на translations.py, указатель файла на csvTranslations.csv теперь находится в конце файла и далее пытается прочитать из csvfile return no (вместо этого они указывают «вы уже в конце файла!», в результате чего ваш цикл в for row_index, row in enumerate(reader): должен выйти.) Самый простой способ исправить проблему - открыть csvTranslations.csv второй раз, ранее к строке reader = csv.reader(csvfile, dialect='colons'); это дает вам новый указатель в файл, этот в начале.

0
ответ дан Maxander 17 August 2018 в 12:08
поделиться
Другие вопросы по тегам:

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